到目前为止,我的经验是,在没有任何解决方案的情况下,Eclipse的错误发现是非常糟糕的(在设置的每一点都尝试了__GXX_EXPERIMENTAL_CXX0X__、-std=c++0x、-std=c++11 )。我已经到了不想再寻找解决方案的地步了。现在我只想看到真正的编译器错误。但是如何做到这一点呢?
发布于 2013-03-12 14:39:42
我被c++11代码的Cordian错误困扰,这些代码在启用了所有警告的情况下在gcc中编译得很好。我找到了我认为的根本原因,至少在我的案例中是这样。很少有其他关于c++11坐标错误的问题是这个问题的副本,并指向这个问题。所以我想我应该把我的答案贴在这里。
这是我找到的:项目属性> C++常规>预处理器…> entries > GNU C++ > CDT GCC内置编译器设置将*__cplusplus=199711L*作为条目之一。
我对其进行了如下更改:在窗口>首选项> C/C++ >构建>设置>发现选项卡中,选择CDT GCC内置编译器设置,并将${COMMAND} -E -P -v -dD ${INPUTS}改为${COMMAND} -E -P -v -std=c++11 -dD '${INPUTS}‘。然后点击Apply。在下一次构建之后,这些错误就消失了。
我使用的是带有CDT8.1.2和手工制作文件的Juno SR2。
添加了更多颜色:
我不是专家,但以下是我认为在我的案例中发生的事情:
Cordian以多种方式收集错误。
一个是解析编译器输出。我的Makefile中的-std=c++11确保了这个部分一直正常工作,因为通过终端调用相同的Makefile不会标记任何错误。
另一种是通过“代码分析”。为此,可能还有其他任务,Ecplise需要知道编译器将使用的设置。Eclipse通过调用我在上面编辑的命令并解析输出来查找它们。通过在点击“应用”之前勾选“在控制台视图中分配控制台”,可以查看此命令的输出。这些设置包括目录和定义,如__cplusplus。当这些与通过我的Makefile调用时,gcc将使用的内容相匹配时,结果是一致的。
当我在头中使用#杂注消息来试验这个问题时,我认为__GXX_EXPERIMENTAL_CXX0X__是错误的,并看到一些在线建议手动设置它,但这似乎也是一个变通办法。
发布于 2014-03-14 22:28:59
在全新的Eclipse安装中,触发一个宏并重新构建索引解决了这个问题:
项目->属性->预处理器包括选择GNU选择C++用户设置条目按Add
并添加一个名称为__cplusplus、值为201103L的预处理器宏。
最后,重建索引。(项目->C/C++索引->重建)
发布于 2013-10-10 04:24:10
您还可以通过执行以下步骤从CDT作用域中删除有问题的代码部分:
现在你可以写下:
#idndef MY_CODAN_MACRO
// this code is visible by compiler only
#else
// this code is visible by code analysis and CDT, but not visible by compiler
#endif我认为这个技巧在Indigo+中是可能的。我用的是Juno。
https://stackoverflow.com/questions/13458396
复制相似问题