所以假设我有一个名为A的类.A类有几个基本属性,但它的一个属性应该是Class A类型。这是我所说的一个例子:
get NAME(){...}
然而,当我尝试构建它时,我得到错误"不允许不完整的类型",我假设与属性c没有A的定义这一事实有关,但即使我把:
class A {
public:
int a;
bool b;
A c;
};
在我构建A类之前,但我仍然得到错误"不允许不完整类型"。如果有人知道如何在A类中创建类A类的属性,我将非常感谢您的帮助。 感谢
编辑:我不相信这篇文章是重复的,因为我试图找出如何在A类中创建类A类的属性,而不仅仅是"为什么你不能创建自己的一个实例......"
答案 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个字节的成员...
你看到这会发生什么?