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

C++ How to have an instance of the same class as an attribute?

本文关键字:一类 实例 属性 C++      更新时间:2023-10-16

我正在尝试让一个名为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()}}

这是我的立方体。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.

您不需要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();
}

演示