1. ホーム
  2. C++

C++】「不完全なクラス型へのポインタは許可されません」を解決する方法

2022-02-22 22:33:04

理由 その型へのポインタによってメンバ関数が呼び出される場合、その型は完全に定義されていません。

原因は (1)定義の順序が妥当でない。コンパイラはポインタに出会ったとき、それが初期化されていることを知った上で、ポインタのためのメモリを確保する。したがって、ある型のメンバ関数を呼び出す必要がない場合、その型が正しく宣言されていれば、定義の順序は理論的に任意である。呼び出しは完全な定義の後に行わなければなりません。

(2) 定義されたヘッダーファイルが、(cxx)ファイルに含まれていない。

例 以下の置換は不正確です。

class Car;
class Apple;
 
class Apple{
    Car aCar;
}
};
 
class Car{
    Apple anApple;
};
 
int main(){
 
    return 0;
}