2015-09-24 26 views
2

我正在處理的代碼庫已經自動從Java轉換爲C++(是的,是的,我知道,不是一個好主意,但長故事由短,有人需要的話),我發現,在許多類我有以下兩個錯誤,關係到我ClassNameXXX類型:錯誤之間的區別「不命名類型」和「尚未聲明」

‘ClassNameXXX’ does not name a type 

‘ClassNameXXX’ has not been declared 

我明白casue的問題是ClassNameXXX.h頭文件和其他文件之間循環包含的問題(我正在工作g很難解決這個問題),但我想知道兩個錯誤消息之間的實際區別是什麼(也許這會給我一些解決週期的線索)。

在此先感謝!

回答

2

「ClassNameXXX」尚未聲明

這一次,顧名思義,emited當你想,如果你寫void SomeClass::foo(){}沒有宣佈SomeClass定義尚未宣佈的東西,例如首先(例如,您忘記了某些Class.cpp中的#include someClass.h)。編譯器知道您正在嘗試定義SomeClass的成員,但未能找到它,並給出錯誤。

「ClassNameXXX」沒有指定類型在不同的情況下,例如

這一個上升

class MyClassOne 
{ 
    MyClassTwo _member;//error 
}; 

class MyClassTwo 
{ 
}; 

這裏編譯器明白MyClassTwo應該是_member,但由於MyClassTwo還沒有在那個地方定義,編譯器不知道,這樣的類型存在,所以它告訴你MyClassTwo沒有命名一個類型。