C++ 假设的不完整类型错误:对象与指针
在一个假设的情况下,我有两个类a和B 我在此头文件开头同时向前声明A和B:C++ 假设的不完整类型错误:对象与指针,c++,pointers,incomplete-type,C++,Pointers,Incomplete Type,在一个假设的情况下,我有两个类a和B 我在此头文件开头同时向前声明A和B: class A; class B; 稍后我定义了类B,并将其定义为: class B { public: A aInstance; } 本质上是在类B中创建一个称为aInstance的类型为A的对象 但是,这将返回一个不完整的类型错误 class B { public: A* aInstance; } 没有 将对象BinInstance声明为指针可以解决此错误吗?我主要是想找一个解释来帮助我更好地理解指针,因为我目
class A;
class B;
稍后我定义了类B,并将其定义为:
class B
{
public:
A aInstance;
}
本质上是在类B中创建一个称为aInstance的类型为A的对象
但是,这将返回一个不完整的类型错误
class B
{
public:
A* aInstance;
}
没有
将对象BinInstance声明为指针可以解决此错误吗?我主要是想找一个解释来帮助我更好地理解指针,因为我目前对指针的理解不是很严格
谢谢简而言之,编译器从类定义中知道的一件事是该类实例的大小。在这里,编译器拥有它所需要知道的一切,因为指针的大小并不取决于它指向的对象:
struct B {
A* aInstance;
};
B
的大小是指针的大小加上可能的填充。然而,在这里:
struct B {
A aInstance;
};
B
的大小是A
实例的大小,要知道A
的定义是必要的。哎呀,对不起,那是很多打字错误,都是“假设类”?这是一种假设情况:我的代码中实际上不存在a类或B类,但我在同一上下文中遇到了一个基本相同的问题,因此我命名了两个假设,在本例中,两个类,它们是从我的代码中简化的,以帮助我总结为什么会发生此错误。这让人困惑,您有示例代码,所以它们确实存在于您的示例代码中:)fwiw,您在这里发布的代码很少与您正在处理的代码以及实际问题所在的代码相同。这就是a的用途:只有与问题相关的代码,没有其他内容。我不认为这是假设,但我理解你的意思谢谢,所以如果我在定义B之前定义了A(使用构造函数),那么第二个实例(非指针A实例)可以工作吗?@Dan是的,应该可以。“不完整类型”意味着它尚未定义,如果您定义了它,那么它就不再是不完整类型