error: field 'b' has imcomplete type
生活随笔
收集整理的這篇文章主要介紹了
error: field 'b' has imcomplete type
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在下面的程序中,在編譯時會遇到下面的錯誤:
error: field 'b' has incomplete type
域b是一個不完備的類型,即class B的聲明不完備
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 class B b; 8 public: 9 A(){cout<<"this is A constructor!"<<endl;} 10 }; 11 12 class B 13 { 14 public: 15 B(){cout<<"this is B constructor!"<<endl;} 16 }; 17 18 int main() 19 { 20 A a; 21 return 0; 22 }?
分析:
出現該錯誤的原因是在聲明class A的成員變量b時, b的類型 class B 還沒有定義。
類或結構體的前向聲明只能用來定義指針對象,當編譯到7 class B b;?時還沒有發現定義,
不知道該類或者結構的內部成員,沒有辦法具體的構造一個對象。
Debug:
將class B的定義放到class A之前即可編譯通過
?
那么還有哪些情況下會出現這樣的情況呢?
1. 在使用設計模式時,我們時常會用到工廠模式,當我們需要添加工序類的時候,往往習慣現在工廠類中定義工序的對象,然后在工廠類之后定義工序類,從而出現本文中的錯誤。
? ? 比較好的解決方法是,將工序類單獨存放到一個頭文件中,然后在工廠類所在文件中引用該頭文件。
2. 在使用STL容器的時候,往往忘記添加相應的頭文件。如#include <vector>; #include <list>; #include <deque>等
?
?
轉載于:https://www.cnblogs.com/double-win/p/3683550.html
總結
以上是生活随笔為你收集整理的error: field 'b' has imcomplete type的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL : 在SQL Server 20
- 下一篇: 使用富文本OHAttributedLab