2012-02-17 113 views
10

我曾使用常規文本編輯器處理過C++項目。 稍後,我將所有文件導入到Eclipse中,以使它更容易調試。未找到會員聲明

在Eclipse中發生了一件奇怪的事情。 它抱怨「未找到成員聲明」,即使我已經包含頭文件。 頭文件具有函數定義。

我該如何解決這個問題?

在此先感謝

+0

eclipse是否知道在哪裏查找頭文件?如果是這樣,那麼我們可能需要一些更多信息 – Neowizard 2012-02-17 08:15:50

回答

14

「成員聲明沒有發現」是由Eclipse靜態分析工具(codan)產生的錯誤。如果你得到這個錯誤,但編譯成功,這是一個誤報。已知該工具的較舊版本會給出一些誤報,例如參見this bug report。所以我建議將Eclipse CDT更新爲最新版本。

可能導致此錯誤的另一件事是一個未解決的包含,它會阻止Eclipse正確解析代碼的一部分。在項目的上下文菜單中選擇Index -> Search For Unresolved Includes會給你未解決的包含列表。有關如何解決問題的詳細信息,請參閱this answer

下面是一個例子:

class C { 
    void f(std::vector<int>&); 
}; 

void C::f(std::vector<int>&) {} // Member declaration not found 

上面的例子導致「成員聲明未找到」錯誤在Eclipse CDT即使你有<vector>包括在內,但尚未解決的(由於錯誤配置包括路徑)。

1

我注意到,「成員聲明未找到」也會在您創建一個名稱已使用或類是關鍵字的類時報告。

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2014-11-05 03:55:24

+2

我不同意你的看法。 – 2014-11-05 07:59:40

5

雖然構建成功,但我也在Eclipse中多次遇到過這個問題。我們可以簡單地通過在項目菜單中重建C/C++索引來解決這個問題。 :)

0

我在創建此消息的.cpp文件中發現錯誤。我在文件前面有namespace std {,並且我在關閉}後爲namespace放置了我正在創建的新功能。將關閉}移動到文件末尾,以便定義的文件現在位於namespace中修復了錯誤消息。

創建錯誤的示例。

#include "MyStrFuncs.h" 

**namespace** std { 

MyStrFuncs::MyStrFuncs() { 
    // TODO Auto-generated constructor stub 
} 

MyStrFuncs::~MyStrFuncs() { 
    // TODO Auto-generated destructor stub 
} 

} // This ends the **namespace** 

//Additional functions will now generate the member declaration not found error... 

int MyStrFuncs::str2i(string strIn) { 
    int results; 
    istringstream convert(strIn); 

    if(!(convert)>>results) results = 0; 

    return results; 
} 
// Fix by moving closing } for namespace to here. Good luck. 
0

即使使用CDT 9.2.1和Eclipse Neon 4.6.3「未找到成員聲明」問題也會報告。 由Srijeyanthan回答,以下內容應解決它: 項目> C/C++索引>重建。

0

我在eclipse中分割源文件和頭文件時也遇到了這個問題。我通過「實現方法」eclipse解決了這個問題,而不是手動輸入和構建項目。通過實現方法將「內聯函數」添加到源文件中。