我有一个类,它应该有一个与其成员类型相同的类。
我的声明如下:
class clsNode
{
private:
clsNode m_Mother;
public:
void setMother(const clsNode &uNode, int index);
};
C++ 告诉我“该对象显示了一个与成员函数不兼容的类型限定符。
我不知道我错在哪里。
最佳答案
原因是成员m_Mother 的类型在声明时的类型不完整。
如果你仔细想想。如果它可行,您将创建一个对象,其中包含一个内部具有相同类型的对象,而该对象内部又总是具有一个相同类型的对象(依此类推)。 从某种意义上说,该对象将具有无限大小。
一个解决方案是保留一个指向父类的指针。
class clsNode
{
private:
clsNode* m_Mother;
public:
void setMother(clsNode* uNode){ m_Mother=uNode; }
};
如果你想让所有的 parent 在他们的 child 的生命周期中一直活着,你可以使用共享指针而不是原始指针。
class clsNode
{
private:
std::shared_ptr<clsNode> m_Mother;
public:
void setMother(std::shared_ptr<clsNode> uNode){ m_Mother=uNode; }
};
如果您采用此解决方案,您最初会使用 make_shared 创建对象
关于C++与类中的成员相同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16756876/