在构造函数中初始化变量?

问题描述 投票:-1回答:4

我正在尝试将带有矢量的对象设置为成员字段。我设置了构造函数,据我所知它确实初始化了该成员变量,但是除非我在对象的函数调用中对其进行初始化,否则在尝试访问该向量时会遇到错误。我收到警告说[]

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);

谢谢你们!

我正在尝试将带有矢量的对象设置为成员字段。我设置了构造函数,据我所知它确实初始化了该成员变量,但是当我尝试......>

c++ inheritance vector std glfw
4个回答
4
投票

std::vector<Vector> m_vertices = vertices;

2
投票
  1. 您正在构造函数中定义并初始化名为m_vertices的局部变量,而不是类的成员变量。

1
投票

在默认构造函数中:


1
投票
在此构造函数中:

Shape2D::Shape2D() { std::vector<Vector> *m_vertices = new std::vector<Vector>; }

© www.soinside.com 2019 - 2024. All rights reserved.