未找到会员声明

时间:2012-02-17 05:25:37

标签: c++ eclipse eclipse-cdt

我使用常规文本编辑器从事过C ++项目。后来,我将所有文件导入Eclipse,使调试更容易。

在Eclipse中发生了一件奇怪的事情。即使我已经包含头文件,它也会抱怨“找不到成员声明”。头文件具有函数定义。

如何解决此问题?

7 个答案:

答案 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>