C++報錯 XX does not name a type;field `XX’ has incomplete type的解決方案
C++報錯 XX does not name a type;field `XX’ has incomplete type解決方案
兩個C++編譯錯誤及解決辦法–does not name a type和field `XX’ has incomplete type
編譯錯誤一:XX does not name a type
編譯錯誤二:field `XX’ has incomplete type
編譯錯誤一:XX does not name a type
拿個例子來講,如果兩個類定義如下:
class B{ public: B(){} ~B(){} private: A a; }; class A{ public: A(){} ~A(){} private: int a; };
編譯成則將報一個error:“A does not name a type”
即使clase A和class B分別在兩個文件定義,并且在定義B的文件頭中#include了class A的頭文件也同樣會報這個錯(這是因為編譯和鏈接之間的先后關系造成的)。
解決該錯誤的辦法:
在class B定義聲明之前先聲明一下class A, 如下:
class A; class B{ public: B(){} ~B(){} private: A a; }; class A{ public: A(){} ~A(){} private: int a; };
編譯錯誤二:field `XX’ has incomplete type
同樣緊跟上面的例子,通過問題一的辦法,第一個錯誤已經消失,但是馬上第二個錯誤就出現了!還是同一個位置。
這個錯誤的意思,就是說class B中的XX域的類型不夠完整,為什么呢?明明class A后面已經定義好了啊。其實原因還是和前面一樣,在class B定義之前,我們也只是對class A進行了聲明而并沒有進行具體的定義,所以解決該錯誤的方法是:
將class B定義中的A域改用指針就行了。改正后代碼為:
class A; class B{ public: B(){} ~B(){} private: A *a; }; class A{ public: A(){} ~A(){} private: int a; };
這樣,這段簡單的代碼才能沒有錯誤的通過編譯。
到此這篇關于C++報錯 XX does not name a type;field `XX’ has incomplete type解決方案的文章就介紹到這了,更多相關C++報錯field `XX’ has incomplete type內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
windows下安裝QT及visual studio 2017搭建開發(fā)環(huán)境
這篇文章主要介紹了windows下安裝QT及visual studio 2017搭建開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03