我使用 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/