C ++如何将相同类的实例作为属性?

时间:2018-10-29 00:46:03

标签: c++ class reference

我正在尝试让一个名为Cube的类具有一个属性,该属性是另一个多维数据集的实例。

这是我的Cube.cpp的重要部分:

bool hasSon = false;
Cube* son;
Cube::Cube()
{
}
void Cube::setSon(Cube* s)
{
    son = s;
    hasSon = true;
}
void Cube::draw() {if(hasSon) {son->draw()}}

这是我的cube.h:

    class Cube
{
public:
    Cube();
    bool hasSon;
    Cube* son;
    void setSon(Cube* son);
    void draw();
};

我正在实例化多维数据集并使用setSon();像这样:

Cube* base = new Cube();
Cube* base2 = new Cube();
base->setSon(base2);

我遇到的问题是,即使我从不调用setSon();,我也会遇到内存错误的情况,设置son属性的正确方法是什么?

这是我的错误:

    Exception thrown at 0x00DA3716 in CG_Demo.exe: 0xC0000005: Access violation reading location 0xCDCDCDF1.
Unhandled exception at 0x00DA3716 in CG_Demo.exe: 0xC0000005: Access violation reading location 0xCDCDCDF1.

1 个答案:

答案 0 :(得分:0)

您不需要hasSon。您可以初始化指向nullptr的指针,并使用它来测试是否设置了Cube*。由于您提供的代码不完整,因此很难说出为什么会出错,但这可以解决问题,

class Cube
{
public:
    Cube();
    //bool hasSon;
    Cube* son;
    void setSon(Cube* son);
    void draw();
};

Cube::Cube() : son(nullptr)
{}

void Cube::setSon(Cube* s)
{
    son = s;
}

void Cube::draw() 
{
    if(son) 
        son->draw();
}


int main()
{
    Cube* base = new Cube();
    Cube* base2 = new Cube();
    base->setSon(base2);
    base->draw();
}

Demo