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

Posted

技术标签:

【中文标题】C++ 与类中的成员相同的类【英文标题】:C++same class as member in class 【发布时间】:2013-05-26 06:50:37 【问题描述】:

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

我的声明如下:

class clsNode

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

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

我不知道我哪里出错了。

【问题讨论】:

【参考方案1】:

原因是成员 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 创建对象

【讨论】:

我想你想要的可能是weak_ptr&lt;clsNode&gt;。命名表明母节点拥有子节点,您不想通过指针循环来防止释放。 当然可以。但我猜想母亲不拥有盾牌,因为你可以没有母亲。【参考方案2】:

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

class clsNode

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于C++ 与类中的成员相同的类的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的类中初始化与公共和私有相同的函数:它是如何工作的?

接口中的内部类与类中

C ++继承类具有同名成员

SSM框架MyBatis笔记 --- 动态sql讲义+实战;map在动态sql中的使用;列名与类中成员变量名不同的两种解决方案

c++中的访问控制

C++ 结构体与类指针