是否可以在类A中创建类A类的属性?

时间:2017-07-04 20:05:21

标签: c++ class properties

所以假设我有一个名为A的类.A类有几个基本属性,但它的一个属性应该是Class A类型。这是我所说的一个例子:

get NAME(){...}

然而,当我尝试构建它时,我得到错误"不允许不完整的类型",我假设与属性c没有A的定义这一事实有关,但即使我把:

class A {
public:
    int a;
    bool b;
    A c;
};

在我构建A类之前,但我仍然得到错误"不允许不完整类型"。如果有人知道如何在A类中创建类A类的属性,我将非常感谢您的帮助。 感谢

编辑:我不相信这篇文章是重复的,因为我试图找出如何在A类中创建类A类的属性,而不仅仅是"为什么你不能创建自己的一个实例......"

2 个答案:

答案 0 :(得分:1)

据我所知,你需要完整的类型来按值定义数据成员,因为它们是直接在每个类对象中分配的,这对于了解类对象的大小很重要。前向声明在这里没有帮助,因为它只提供了一个不完整的类型。您可以拥有指向A的引用或指针,例如:

class A {
public:
    int a;
    bool b;
    A* c;
};

答案 1 :(得分:1)

是的,这是不可能的,你必须将它声明为如此指针:

class A {
public:
   int a;
   bool b;
   A* c;
};

然后你可以在堆上分配c。 原因是编译器无法知道A的大小。像编译器一样思考。你能算出A的大小吗?成员a可能有4个字节。然后可能是b的一个字节。对于c,我们必须查看A的类定义。那么A的大小因此是4个字节的成员... 你看到这会发生什么?