C ++与类中的成员相同的类

时间:2013-05-26 06:50:37

标签: c++ class member

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

我的声明如下:

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

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

我不知道哪里出错了。

3 个答案:

答案 0 :(得分:3)

原因是成员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

创建对象

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您拥有类类型的成员(直接不是指针),则您的母类实例实际包含所包含的实例。

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