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

标签 c++ class member

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

我的声明如下:

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/

相关文章:

java - Java 中类的“final”修饰符

c# - 如何使用反射访问内部类

c++ - 递归:使用传入参数的值

c++ - 读取文本文件导致缓冲区末尾出现无效字符

.net - 在 PS 类中引用程序集会导致 "Unable to find type"错误

c++ - 如何从成员函数中获取私有(private)数据? C++

list - Prolog 中的元素处理问题,但不在常规列表中?

c++ - 为程序分配内存的最佳方式

c++ - 节点优先级队列

c++ - 如何在模板类的成员中使用重载的原始 exp