兩個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,
中文意思為“XX沒有命名一個型別“
拿個例子來講,如果兩個類定義如下:
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;
};
參照: http://www.allegro.cc/forums/thread/586909
編譯錯誤二:
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;
};
這樣,這段簡單的程式碼才能沒有錯誤的通過編譯。
相關文章
- 編譯錯誤--------:XX does not name a type和field `XX' has incomplete type編譯
- 編譯錯誤 --- does not name a type和field `XX' has incomplete type編譯
- eclipse :報錯 ‘XXXX‘ does not name a type的解決辦法Eclipse
- ndk編譯錯誤:error: 'override' does not name a type編譯ErrorIDE
- 編譯錯誤導致浪費10多分鐘, 編譯錯誤的提示:xxx does not name a type xxx編譯
- `QtValidLicenseForCoreModule' does not name a type 錯誤的解決QTREM
- QT中error: xxx does not name a type xxx錯誤QTError
- error: ‘xxx’ does not name a typeError
- ‘map’ does not name a type
- vector does not name a type
- error :does not name a typeError
- PHP編譯錯誤及解決辦法PHP編譯
- error: '[class name]' does not name a typeError
- Qt 報錯 “類名”does not name a typeQT
- error: 'cout' does not name a type|Error
- does not name a type 的可能性
- error: ‘變數名‘ does not name a type|Error變數
- 'int32_t' does not name a type
- Idea編譯錯誤解決辦法Idea編譯
- OpenCV1.0編譯錯誤解決辦法OpenCV編譯
- Qt5.7中報錯“xxx dose not name a type”的原因;QT
- C++ doesn't name a typeC++
- xcode6編譯錯誤,提示Expected a typeXCode編譯
- PostgreSQL cache lookup failed for type XXXX 錯誤SQLAI
- Qt 標頭檔案互相包含會報錯'' does not name a typeQT
- Access restriction: The type 'Resource' is not API 解決辦法RESTAPI
- This function has none of DETEMINISTIC,NO SQL錯誤解決辦法FunctionNoneSQL
- Myeclipse 錯誤An internal error has occurred 解決辦法EclipseError
- PHP編譯安裝時常見錯誤解決辦法,php編譯常見錯誤PHP編譯
- MYSQL中 TYPE=MyISAM 錯誤的解決方法MySql
- 解決 TypeError: Type aliases cannot be used with isinstance(). 辦法Error
- std::unique_ptr使用incomplete type的報錯分析和解決
- dcat-admin 表單 Field type [autocomplete] does not exist.
- isNaN("abc")編譯報錯解決辦法NaN編譯
- error:dereferencing pointer to incomplete typeError
- 執行無法解決的編譯錯誤編譯
- 通俗易懂解釋一類和二類錯誤(Type I Error Type II Error)Error
- samba一個錯誤的解決辦法!Samba