2

我有一个类应该有一个与其成员相同类型的类。

我的声明如下:

class clsNode
{
private:
     clsNode m_Mother;
public:
     void setMother(const clsNode &uNode, int index);
};

C++ 告诉我“对象显示了与成员函数不兼容的类型限定符。

我不知道我哪里错了。

4

3 回答 3

4

原因是成员 m_Mother 的类型在声明时的类型不完整。

如果你考虑一下。如果可行,您将创建一个内部具有相同类型的对象的对象,而该对象又总是内部具有相同类型的对象(依此类推)。从某种意义上说,该对象将具有无限大小。

一种解决方案是保留指向父类的指针。

class clsNode
{
private:
     clsNode* m_Mother;
public:
     void setMother(clsNode* uNode){ m_Mother=uNode; }
};

如果你想让所有的父母在他们的孩子的一生中总是活着,你可以使用共享指针而不是原始指针。

class clsNode
{
private:
     std::shared_ptr<clsNode> m_Mother;
public:
     void setMother(std::shared_ptr<clsNode> uNode){ m_Mother=uNode; }
};

如果您使用此解决方案,您最初将使用 make_shared 创建对象

于 2013-05-26T06:55:19.137 回答
0

类中不能有相同类型的成员。编译器尝试计算对象的大小并“进入循环”。你可以通过使用间接来解决这个问题。例如,您可以存储指向母节点的指针。

class clsNode
{
private:
     clsNode* m_Mother;
public:
     void setMother(const clsNode &uNode, int index);
};
于 2013-05-26T06:56:14.433 回答
0

当您有一个类类型的成员(直接不是指针)时,您的母类的实例实际上包含所包含的实例。

在这种情况下,编译器找不到 clsNode 类的大小,因为存在循环。它应该包含一个 clsNode,它应该包含一个 clsNode,等等。

于 2013-05-26T06:56:40.897 回答