c++ - Eclipse CDT 无法解析 STL 容器中元素的方法

标签 c++ eclipse stl eclipse-cdt

我使用 Eclipse Juno 和 CDT 来开发我的 C++ 项目和自定义 makefile。我也在使用 C++11 功能,我必须按照此处关于 SO 的建议使用 Eclipse 的解析器。

问题是 Eclipse 无法解析在 STL 容器元素上访问的方法或字段。例如:

mainapp.h

typedef struct _PlayerCalibrationData {
    [...]
    std::string getSamplesStr()
    {
            [...]
    }
} PlayerCalibrationData;

std::vector<MainApp::PlayerCalibrationData> m_calibrationData;

mainapp.cpp

m_calibrationData[0].getSamplesStr();

getSamplesStr() 将带有下划线并标记为错误,并显示消息“Method 'getSamplesStr' could not be resolved”。

不过,无论我是从 Eclipse 还是从命令行调用它,编译器都不会提示。

此外,当我键入 m_calibrationData. 时,所有 vector 方法都会通过内容辅助弹出(即,这不是 Eclipse 未找到 vector 包含的问题),但只要我通过[]at(),内容辅助是安静的,任何手动输入的内容都被标记为错误。

这不起作用是正常的吗?如果是,是否有一种方法可以专门关闭基于模板的容器的辅助/更正?

编辑

我现在还尝试禁用 c++11 支持,如果我这样做,问题就会消失——但当然无法识别 c++11 类型和语法。

编辑 2

我导入了第二个项目,输入了完全相同的设置,对于这个项目,解析工作正常。唯一的区别是项目布局(makefile 的不同位置)。但是即使我删除并重新导入第一个项目,它仍然不起作用。

最佳答案

这对我有用:

“你的项目名称” -> 右击 -> 属性:

C/C++ General -> Preprocessor Include Paths, Macros etc. -> 切换到名为“Providers”的选项卡:

  • 对于“配置”选择“发布”(然后选择“调试”)

  • 关闭所有提供程序并选择“CDT GCC 内置编译器设置”

  • 取消选中“在项目之间共享设置条目(全局提供者)”

  • 在“获取编译器规范的命令:”中添加不带引号的“-std=c++11”(也可以使用引号)

  • 点击应用并关闭选项

  • 重建索引

这对我在家里和工作中都适用 win7 x64,带cdt的最新官方eclipse mingw-w64 gcc 4.7.2来自 sourceforge 上的 mingwbuilds 项目

关于c++ - Eclipse CDT 无法解析 STL 容器中元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13153688/

相关文章:

c++ - 如何为 Arduino 的接近传感器使用外部电源

java - OSGI:在创建 JUnit 插件测试时出现奇怪的错误

c++ - reheapify的STL实现

java - LibGDX FreeTypeFontGenerator

c++ - 使用 boost::random 作为 std::random_shuffle 的 RNG

C++ 匿名结构作为 std::map 值

c++ - GRPC 为 Google Assistant API 创建 channel 链接

c++ - 在对象 vector 中找到最大值

c++ - std::map 是否允许在只读操作后重新平衡(如 Splay 树)

eclipse - 如何将 GlassFish Server 添加到 Eclipse Oxygen?