我曾使用常規文本編輯器處理過C++項目。 稍後,我將所有文件導入到Eclipse中,以使它更容易調試。未找到會員聲明
在Eclipse中發生了一件奇怪的事情。 它抱怨「未找到成員聲明」,即使我已經包含頭文件。 頭文件具有函數定義。
我該如何解決這個問題?
在此先感謝
我曾使用常規文本編輯器處理過C++項目。 稍後,我將所有文件導入到Eclipse中,以使它更容易調試。未找到會員聲明
在Eclipse中發生了一件奇怪的事情。 它抱怨「未找到成員聲明」,即使我已經包含頭文件。 頭文件具有函數定義。
我該如何解決這個問題?
在此先感謝
「成員聲明沒有發現」是由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>
包括在內,但尚未解決的(由於錯誤配置包括路徑)。
我注意到,「成員聲明未找到」也會在您創建一個名稱已使用或類是關鍵字的類時報告。
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2014-11-05 03:55:24
我不同意你的看法。 – 2014-11-05 07:59:40
雖然構建成功,但我也在Eclipse中多次遇到過這個問題。我們可以簡單地通過在項目菜單中重建C/C++索引來解決這個問題。 :)
我在創建此消息的.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.
即使使用CDT 9.2.1和Eclipse Neon 4.6.3「未找到成員聲明」問題也會報告。 由Srijeyanthan回答,以下內容應解決它: 項目> C/C++索引>重建。
我在eclipse中分割源文件和頭文件時也遇到了這個問題。我通過「實現方法」eclipse解決了這個問題,而不是手動輸入和構建項目。通過實現方法將「內聯函數」添加到源文件中。
eclipse是否知道在哪裏查找頭文件?如果是這樣,那麼我們可能需要一些更多信息 – Neowizard 2012-02-17 08:15:50