找不到成员声明
Member declaration not found
我曾使用常规文本编辑器处理过一个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而不是手动键入和构建项目来解决这个问题。通过实现方法,"内联函数"将被添加到源文件中。
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 如何使用模板声明成员函数?(不是模板类)
- 如何使用 Boost.Hana 声明成员变量
- 声明成员对象而不调用其默认构造函数
- 使用函数类型语法声明成员函数
- 尝试访问标头声明成员时出现隔离错误
- 根据二手构造函数声明成员
- C 模板明确声明成员函数值/避免了宏的问题
- 如何在基本模板类中声明成员,其中类型取决于派生类的类型
- 错误:类中没有声明成员函数
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 从variadic模板参数声明成员变量
- 在类(C )中使用模板时未声明成员函数
- 错误:类中未声明 '' 成员函数
- 如何在指向常量地址时声明成员函数常量指针
- 何时以及为什么在堆C++上声明成员变量
- C++ 错误:未在范围内声明;成员函数
- 在不声明成员变量的情况下更改按钮颜色
- 错误 C2535:已定义或声明成员函数
- 当声明成员函数时,*New()是什么意思