直到现在我的经验是,Eclipse的错误发现在没有任何解决方案的情况下非常麻烦(在设置的每个点附近尝试__GXX_EXPERIMENTAL_CXX0X__
,-std=c++0x
,-std=c++11
。我不想再寻找解决方案了。现在我只想看到真正的编译器错误。但是如何实现这个目标呢?
答案 0 :(得分:20)
更新:自从我发布原始答案后已经很久了,它已经过时了。我今天仔细检查了(2014年3月15日):在Eclipse Kepler(Build id 20130614-0229)中就足够了
在项目>下添加属性> C / C ++ Build>设置然后在工具设置选项卡上 GCC C ++编译器>杂项 -std=c++11
标志,
然后在 Window>下偏好> C / C ++>构建> Discovery 选项卡上的设置选择了 CDT GCC内置编译器设置,并将-std=c++11
标志添加到命令以获取编译器规范< / em>的。在我的机器上,在更改后它看起来像这样:
${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"
清理并重建您的项目和您的索引(项目&gt; C / C ++索引&gt;重建),因为Eclipse倾向于缓存错误消息并显示即使它们在更改设置后消失了。
这肯定会在我的机器上运行。如果它不在您的机器上,那么您可能想对此进行一次拍摄:C++11 full support on Eclipse虽然我不确定这种方法的正确性也没有必要在我的机器上进行。截至2014年3月7日,用户claim表示它帮助了他们,而上述方法并没有。
2012年的原帖,现已过时:
<击> 这些虚假错误来自Codan。我也发了一个bug report(C ++ 03 !!!)但同样的问题出现在最新稳定的Eclipse中,所以我不会想到已经发生了很多事情:(
<击>解决方法:强>
单击项目属性,然后单击 C / C ++ General&gt;代码分析&gt;语法和语义错误并取消选择您获得的任何错误错误。
我只想看到真正的编译器错误
当然,您可以完全禁用静态分析,在这种情况下,您可以完全按照自己的意愿完成。
更新: 2位用户报告说Jeevaka所写的内容帮助了他们。我试过他写的东西,它对Juno SR1和CDT 8.1.1没有帮助。也许Codan开发人员改进了Juno SR2和CDT 8.1.2中的静态分析
击><击> 撞击>
答案 1 :(得分:6)
我对c ++ 11代码的Cordian错误感到困扰,这些错误在gcc中完美编译并启用了所有警告。我发现我认为是根本原因,至少在我的情况下。很少有关于c ++ 11的Cordian错误的其他问题被关闭作为这个问题的重复,并指向这个问题。所以我虽然会在这里发布我的答案。
这是我发现的: 项目属性&gt; C ++一般&gt;预处理器...&gt;参赛作品&gt; GNU C ++&gt; CDT GCC内置编译器设置将* __ cplusplus = 199711L *作为其中一个条目。
我改变如下: 在窗口&gt;偏好&gt; C / C ++&gt;构建&gt;设置&gt;发现选项卡已选择 CDT GCC内置编译器设置并将 $ {COMMAND} -E -P -v -dD $ {INPUTS} 更改为 $ { COMMAND} -E -P -v -std = c ++ 11 -dD'$ {INPUTS}'。然后点击Apply。 下次构建后错误消失了。
我正在使用带有CDT 8.1.2的Juno SR2和手工制作的文件。
添加更多颜色:
我不是专家,但这就是我认为在我的案例中发生的事情:
Cordian以多种方式收集错误。
一个是解析编译器输出。我的Makefile中的-std=c++11
确保这部分一直正常,因为通过终端调用相同的Makefile没有标记任何错误。
另一种是通过'代码分析'。为此,可能还有其他任务,Ecplise需要知道编译器将使用的设置。 Eclipse通过调用上面编辑的命令并解析输出来找到它们。在点击“应用”之前勾选“控制台视图中的分配控制台”,可以查看此命令的输出。这些设置包括包含目录和定义,如__cplusplus。当这些匹配gcc在通过我的Makefile调用时会使用的结果是一致的。
当我在头文件中使用#pragma message试验问题时,我认为__GXX_EXPERIMENTAL_CXX0X__是错误的,并且看到了一些手动设置的在线建议,但这似乎也是一种解决方法。
答案 2 :(得分:5)
在全新的Eclipse安装中,触发一个宏并重建索引解决了它:
项目 - &gt;属性 - &gt;预处理器包含 选择GNU C ++ 选择CDT用户设置条目 按添加
并添加名为__cplusplus
且值为201103L
的预处理器宏。
最后,重建索引。 (项目 - &gt; C / C ++索引 - &gt;重建)
答案 3 :(得分:1)
您还可以通过以下步骤从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。
答案 4 :(得分:-1)
我意识到问题是很久以前问的,但由于问题仍然存在(我使用Kepler并得到相同的错误),我将发布另一种可能的解决方法。
可以创建单独的源文件并重新定义他想要在那里使用的函数(例如,通常的命名空间)。在我创建了这样的函数之后
std::string to_string(long long num) {
return std::to_string(num);
}
并开始在主要来源中使用to_string
而不是std::to_string
(我添加额外的一个包含)eclipse不再将代码标记为错误。
当然,错误会在额外的包含中标记,但它不包含逻辑,所以你甚至不看那里。