我使用常规文本编辑器从事过C ++项目。后来,我将所有文件导入Eclipse,使调试更容易。
在Eclipse中发生了一件奇怪的事情。即使我已经包含头文件,它也会抱怨“找不到成员声明”。头文件具有函数定义。
如何解决此问题?
答案 0 :(得分:18)
“未找到成员声明”是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 :(得分:6)
虽然建设成功,但我在Eclipse中也多次遇到过这个问题。我们可以通过重建项目菜单中的C / C ++索引来解决这个问题。 :)
答案 2 :(得分:1)
我注意到,当您创建一个名称已经使用过或属于关键字的类时,“未找到成员声明”也会报告。
答案 3 :(得分:1)
我在Eclipse中遇到了这个问题,但是在终端中构建成功。所以我只是在Eclipse中重建C / C ++索引: 右键单击项目->索引->重建。
答案 4 :(得分: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.
答案 5 :(得分:0)
即使使用CDT 9.2.1和Eclipse Neon 4.6.3“未找到成员声明”,也会报告问题。 正如Srijeyanthan所回答的那样,以下内容应该解决它: 项目&gt; C / C ++索引&gt;重建。
答案 6 :(得分:0)
我在eclipse中拆分源文件和头文件时也遇到了这个问题。我通过“实现方法”eclipse解决了这个问题,而不是手工打字和构建项目。通过实现方法,“内联函数”将被添加到源文件中。 / p>