【发布时间】:2020-09-27 15:09:10
【问题描述】:
我正在尝试使用向量作为成员字段来设置对象。我设置了构造函数,据我所知,它确实初始化了这个成员变量,但是当我尝试访问向量时出现错误,除非我在对象的函数调用中初始化它。我收到警告说
C26495: Variable 'Engy::Graphics::Shape2D::m_vertices' is uninitialized. Always initialize a member variable (type.6).
问题是,我确实在构造函数中初始化了它。我缺少什么重要的东西吗?这是我的代码:
类声明(头文件)
class Shape2D:Object
{
protected:
std::vector<Vector> *m_vertices;
int type = GL_QUADS;
public:
Shape2D(std::vector<Vector> vertices);
Shape2D();
void draw();
void setVector(int index, Vector value);
Vector getVector(int index);
void translate(double x, double y);
void createVector(int i, double x, double y);
void createVector(double x, double y);
void addVector(Vector value);
};
方法声明(.cpp 文件)
Shape2D::Shape2D(std::vector<Vector> vertices)
{
std::vector<Vector> m_vertices = vertices;
}
Shape2D::Shape2D()
{
std::vector<Vector> *m_vertices = new std::vector<Vector>;
}
void Shape2D::setVector(int index, Vector value)
{
//THIS PART RIGHT HERE IS WHAT I HAVE TO DO TO MAKE IT NOT CRASH, BUT I DONT WANT TO HAVE TO PUT THIS EVERYWHERE
if (!m_vertices)
{
m_vertices = new std::vector<Vector>;
}
if (m_vertices->size() < index)
{
m_vertices->assign(index - m_vertices->size(), NULL);
}
m_vertices->at(index) = value;
}
对象创建
//Rectangle is a subclass of Shape2D which calls the default constructor of Shape2D then runs calls to add the constructor inputs in (Let me know if you would like to see that code)
Rectangle r(0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5);
谢谢你们!
【问题讨论】:
-
为什么成员变量
m_vertices是指针?为什么不只是一个std::vector? -
很抱歉,但请仔细阅读您的书/教程/课程作业,或者如果他们没有清楚地解释如何初始化成员,请获得更好的。
-
是的,我是自学 c++,我来自 java 和 c#,所以这对我来说是全新的哈哈
-
@LincolnDoney:对于从 Java 学习 C++,这里有一个提示:不要使用
new,并且几乎不要使用T*指针。
标签: c++ inheritance vector std glfw