C++報(bào)錯(cuò) XX does not name a type;field `XX’ has incomplete type的解決方案
C++報(bào)錯(cuò) XX does not name a type;field `XX’ has incomplete type解決方案
兩個(gè)C++編譯錯(cuò)誤及解決辦法–does not name a type和field `XX’ has incomplete type
編譯錯(cuò)誤一:XX does not name a type
編譯錯(cuò)誤二:field `XX’ has incomplete type
編譯錯(cuò)誤一:XX does not name a type
拿個(gè)例子來(lái)講,如果兩個(gè)類定義如下:
class B{ public: B(){} ~B(){} private: A a; }; class A{ public: A(){} ~A(){} private: int a; };
編譯成則將報(bào)一個(gè)error:“A does not name a type”
即使clase A和class B分別在兩個(gè)文件定義,并且在定義B的文件頭中#include了class A的頭文件也同樣會(huì)報(bào)這個(gè)錯(cuò)(這是因?yàn)榫幾g和鏈接之間的先后關(guān)系造成的)。
解決該錯(cuò)誤的辦法:
在class B定義聲明之前先聲明一下class A, 如下:
class A; class B{ public: B(){} ~B(){} private: A a; }; class A{ public: A(){} ~A(){} private: int a; };
編譯錯(cuò)誤二:field `XX’ has incomplete type
同樣緊跟上面的例子,通過問題一的辦法,第一個(gè)錯(cuò)誤已經(jīng)消失,但是馬上第二個(gè)錯(cuò)誤就出現(xiàn)了!還是同一個(gè)位置。
這個(gè)錯(cuò)誤的意思,就是說class B中的XX域的類型不夠完整,為什么呢?明明class A后面已經(jīng)定義好了啊。其實(shí)原因還是和前面一樣,在class B定義之前,我們也只是對(duì)class A進(jìn)行了聲明而并沒有進(jìn)行具體的定義,所以解決該錯(cuò)誤的方法是:
將class B定義中的A域改用指針就行了。改正后代碼為:
class A; class B{ public: B(){} ~B(){} private: A *a; }; class A{ public: A(){} ~A(){} private: int a; };
這樣,這段簡(jiǎn)單的代碼才能沒有錯(cuò)誤的通過編譯。
到此這篇關(guān)于C++報(bào)錯(cuò) XX does not name a type;field `XX’ has incomplete type解決方案的文章就介紹到這了,更多相關(guān)C++報(bào)錯(cuò)field `XX’ has incomplete type內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C或C++報(bào)錯(cuò):ld returned 1 exit status報(bào)錯(cuò)的原因及解決方法
- c++報(bào)錯(cuò)問題解決方案lvalue required as left operand of assignment
- 解決pip?install?dlib報(bào)錯(cuò)C++11?is?required?to?use?dlib
- 如何基于C++解決RTSP取流報(bào)錯(cuò)問題
- 解決安裝mysqlclient的時(shí)候出現(xiàn)Microsoft Visual C++ 14.0 is required報(bào)錯(cuò)
- 解決VC++編譯報(bào)錯(cuò)error C2248的方案
相關(guān)文章
windows下安裝QT及visual studio 2017搭建開發(fā)環(huán)境
這篇文章主要介紹了windows下安裝QT及visual studio 2017搭建開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03C++11中bind綁定器和function函數(shù)對(duì)象介紹
這篇文章主要介紹了C++11中bind綁定器和function函數(shù)對(duì)象介紹,綁定器,函數(shù)對(duì)象和lambda表達(dá)式只能使用在一條語(yǔ)句中,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-07-07基于OpenCV?差分法實(shí)現(xiàn)綠葉識(shí)別
物體識(shí)別是圖像處理學(xué)在現(xiàn)實(shí)生活中較多的應(yīng)用之一,本文提供了一種相對(duì)簡(jiǎn)單的思路來(lái)實(shí)現(xiàn)綠葉識(shí)別,適合初學(xué)圖像處理的新人研究參考。感興趣的同學(xué)可以關(guān)注一下2021-11-11怎么實(shí)現(xiàn)類的成員函數(shù)作為回調(diào)函數(shù)
不使用成員函數(shù),為了訪問類的成員變量,可以使用友元操作符(friend),在C++中將該函數(shù)說明為類的友元即可2013-10-10