尽管有许多与此类似的问题,但我无法找到一个可以回答如此简单的问题的问题 - 但是由于数量众多,如果我错过了,您将不得不原谅我。
在以下代码中,会产生以下错误(使用 G++)'error: field 'CompoundField' has incomplete type'
:
class SimpleClass;
class CompoundClass;
class CompoundClass{
public:
SimpleClass CompoundField;
};
class SimpleClass{
public:
unsigned int SimpleField;
};
int main(){
CompoundClass obj;
obj.CompoundField.SimpleField=5;
return 0;
}
当两个类都被前向声明时,为什么会这样?一个直接的解决方案是在, 或指向CompoundClass
之后移动 to ,但这无助于解释这里的潜在问题。SimpleClass
CompoundField
SimpleClass
更准确地说,其他答案表明这是由于编译器不知道子类的大小(即SimpleClass
),为什么SimpleClass
可以相对容易地找到大小?