找不到成员声明

Member declaration not found

本文关键字:声明 成员 找不到      更新时间:2023-10-16

我曾使用常规文本编辑器处理过一个C++项目。后来,我将所有文件导入到Eclipse中,使其更容易调试。

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

如何解决此问题?

"找不到成员声明"是Eclipse静态分析工具(codan)产生的错误。如果你得到这个错误,但编译成功,这是一个假阳性。众所周知,该工具的旧版本会出现一些误报,例如,请参阅此错误报告。因此,我建议将EclipseCDT更新到最新版本。

另一个可能导致此错误的原因是未解析的include,它阻止Eclipse正确解析代码的一部分。在项目的上下文菜单中选择Index -> Search For Unresolved Includes将显示未解析包含的列表。有关如何修复的详细信息,请参阅此答案。

这里有一个例子:

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

上面的例子会导致Eclipse CDT中出现"Member declaration not found"错误,即使您包含但未解析<vector>(由于包含路径配置错误)。

尽管构建是成功的,但我在Eclipse中也多次遇到这个问题。我们可以通过在项目菜单中重建C/C++索引来简单地解决这个问题。:)

我在Eclipse中遇到了这个问题,但在终端中构建是成功的。所以我只是在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,也报告了"未找到成员声明"问题。正如斯里耶扬坦所回答的那样,以下问题应能解决:项目>C/C++索引>重建。

我在eclipse中拆分源文件和头文件时也遇到了这个问题。我通过"实现方法"eclipse而不是手动键入和构建项目来解决这个问题。通过实现方法,"内联函数"将被添加到源文件中。