aggregate `CLASS_B bb' has incomplete type and cannot be defined
aggregate `CLASS_A aa' has incomplete type and cannot be defined
範例:
main.cpp
class CLASS_A;
class CLASS_B;
int main()
{
CLASS_A a;
CLASS_B b;
return 0;
}
CLASS_A.h
class CLASS_A{
public:
CLASS_A(){}
};
CLASS_B.h
class CLASS_B{
public:
CLASS_B(){}
};
另外,你也許用CLASS_B的物件當做 CLASS_A建構的參數,你也許會看到下面的錯誤訊息:
aggregate `CLASS_B bb' has incomplete type and cannot be defined
variable `CLASS_A aa' has initializer but incomplete type
範例:
main.cpp
class CLASS_A;
class CLASS_B;
int main()
{
CLASS_B b;
CLASS_A a(&b);
return 0;
}
CLASS_A.h
class CLASS_B; // Forward reference declare
class CLASS_A{
public:
CLASS_A( CLASS_B *pB){}
};
這些是典型的忘記將 header file inlude進來的問題,只要將該檔案的header file include到 main.cpp中即可。會發生 incomplete type 是因為編譯器在編譯時需要知道物件的大小,但是我們 在還不知道class定義在何處,就將其拿來宣告物件使用。 其詳細的 incomplete type 的解釋請參考 下面相關鏈結。
[Keyword]
incomplete type ; incomplete type + C++ + Class
[相關鏈結]
Incomplete class declarations (C++ only)
Incomplete Type
Forward declarations in C++
C++ Tip: Forward Declaration
forward declaration 唯一的好处只是可以让编译快一点
沒有留言:
張貼留言