【问题标题】:Member declaration not found未找到成员声明
【发布时间】:2012-03-08 13:29:46
【问题描述】:

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

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

我该如何解决这个问题?

【问题讨论】:

  • eclipse 知道去哪里找头文件吗?如果是这样,那么我们可能需要更多信息

标签: c++ eclipse eclipse-cdt


【解决方案1】:

“未找到成员声明”是 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

即使您包含 &lt;vector&gt; 但未解决(由于错误配置的包含路径),上述示例也会在 Eclipse CDT 中导致“未找到成员声明”错误。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我在 Eclipse 中遇到了这个问题,但是在终端中构建是成功的。所以我只是在 Eclipse 中重建 C/C++ 索引: 右键项目->索引->重建。

      【讨论】:

        【解决方案4】:

        我注意到“未找到成员声明”也会在您创建一个名称已被使用或为关键字的类时报告。

        【讨论】:

        • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        • 我不同意你的观点。
        【解决方案5】:

        我在创建此消息的 .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.
        

        【讨论】:

          【解决方案6】:

          即使使用 CDT 9.2.1 和 Eclipse Neon 4.6.3,也会报告“未找到成员声明”问题。 正如 Srijeyanthan 回答的那样,以下应该解决它: 项目 > C/C++ 索引 > 重建。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-06-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-14
              • 1970-01-01
              • 2012-06-22
              • 1970-01-01
              相关资源
              最近更新 更多