これに似た質問がたくさんあるにもかかわらず、このような簡単な質問に答えられるものを見つけることができません。
次のコード内で、次のエラーが生成されます (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
後に移動するSimpleClass
か、 へCompoundField
のポインタを作成することSimpleClass
ですが、ここでの根本的な問題の説明にはなりません。
より正確に言うと、これはコンパイラが子クラスのサイズ (つまりSimpleClass
)を認識していないことが原因であることが他の回答で示されていSimpleClass
ます。