22

到目前为止,我的经验是,Eclipse 的错误发现非常糟糕,没有任何解决方案(在设置的每个点附近都试过__GXX_EXPERIMENTAL_CXX0X__)。我现在不想再寻找解决方案了。现在我只想查看真正的编译器错误。但是如何做到这一点呢?-std=c++0x-std=c++11

4

5 回答 5

20

UPDATE: It's been a long time since I posted the original answer and it has become outdated. I double-checked today (Mar 15, 2014): in Eclipse Kepler (Build id 20130614-0229) it is sufficient to

  • add under Project > Properties > C/C++ Build > Settings then on the Tool Settings tab GCC C++ Compiler > Miscellaneous the -std=c++11 flag,

  • then under Window > Preferences > C/C++ > Build > Settings on the Discovery tab chose CDT GCC Built-in Compiler Settings and add the -std=c++11 flag to Command to get compiler specs. On my machine it looks like this after the change:

    ${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

  • clean and rebuild both your project and your index (Project > C/C++ Index > Rebuild) as Eclipse tends to cache error messages and show them even though they are gone after changing the settings.

This works on my machine for sure. If it doesn't on yours, then you might want to give a shot to this: C++11 full support on Eclipse although I am neither sure about the correctness of this approach nor was it necessary to do it on my machine. As of March 7, 2014 users claim that it helped them whereas the above approach didn't.


The original post from 2012, now outdated:

These bogus errors come from Codan. I also issued a bug report (C++03!!!) but the same problem shows up in the latest stable Eclipse so I don't think much has happened :(

Workaround:

Click on the project properties, then C/C++ General > Code Analysis > Syntax and Semantic Errors and deselect whatever false errors you are getting.

I just want to see solely real compiler errors

Of course, you can disable there the static analysis completely, in that case you can accomplish exactly what you want.


UPDATE: 2 users have reported that what Jeevaka wrote helped them. I have tried what he wrote, it did not help me with Juno SR1 and CDT 8.1.1. Perhaps Codan developers have improved static analysis in Juno SR2 and CDT 8.1.2

于 2012-11-19T19:39:03.033 回答
6

我对 c++11 代码的 Cordian 错误感到困扰,这些代码在 gcc 中完美编译并启用了所有警告。我发现了我认为的根本原因,至少在我的情况下是这样。很少有其他关于 c++11 的 Cordian 错误的问题作为这个问题的副本关闭并指向这个问题。所以我虽然我会在这里发布我的答案。

这是我发现的: 项目属性 > C++ 常规 > 预处理器 ... > 条目 > GNU C++ > CDT GCC 内置编译器设置将 *__cplusplus=199711L* 作为条目之一。

我将其更改如下:在Window > Preferences > C/C++ > Build > Settings > Discovery选项卡中选择 CDT GCC Builtin Compiler Settings并将${COMMAND} -E -P -v -dD ${INPUTS}更改为 ${COMMAND } -E -P -v -std=c++11 -dD '${INPUTS}'。然后点击应用。下一次构建后错误消失了。

我正在使用带有 CDT 8.1.2 和手工制作文件的 Juno SR2。

添加更多颜色:

我不是专家,但这是我认为发生在我的案例中的情况:

Cordian 以多种方式收集错误。

一是解析编译器输出。-std=c++11在我的 Makefile 中确保这部分一直正常工作,因为通过终端调用相同的 Makefile 没有标记任何错误。

另一个是通过“代码分析”。为此,可能还有其他任务,Ecpise 需要知道编译器将使用的设置。Eclipse 通过调用我在上面编辑的命令并解析输出来找到这些。通过在点击“应用”之前勾选“在控制台视图中分配控制台”,可以查看此命令的输出。这些设置包括包含目录和定义,例如 __cplusplus。当这些与通过我的 Makefile 调用时 gcc 将使用的匹配时,结果是一致的。

当我在标题中使用#pragma 消息尝试解决问题时,我认为 __GXX_EXPERIMENTAL_CXX0X__ 是错误的,并看到了一些手动设置的在线建议,但这似乎也是一种解决方法。

于 2013-03-12T06:39:41.613 回答
6

在全新的 Eclipse 安装中,触发一个宏并重建索引解决了它:

Projects->Properties->Preprocessor Includes 选择 GNU C++ 选择 CDT 用户设置条目 按添加

并添加一个带有 name__cplusplus和 value的预处理器宏201103L

最后,重建索引。(项目->C/C++ 索引->重建)

于 2014-03-14T14:28:59.080 回答
1

您还可以通过以下步骤从 CDT 范围中删除有问题的代码部分:

  • 转到项目属性->C/C++ 常规->预处理器包括路径、宏等
  • 在条目选项卡上选择所需的语言
  • 添加->预处理器宏
  • 输入名称“MY_CODAN_MACRO”和值“1”
  • 现在你可以写:

    #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+ 中是可能的。我用的是朱诺。

    于 2013-10-09T20:24:09.880 回答
    -1

    我意识到问题是很久以前提出的,但由于问题仍然存在(我使用 Kepler 并得到相同的错误),我将发布另一个可能的解决方法。

    可以创建单独的源文件并重新定义他想在那里使用的函数(例如在一般命名空间中)。在我创建了这样的功能之后

    std::string to_string(long long num) {
        return std::to_string(num);
    }
    

    并开始使用to_string而不是std::to_string在主要来源中使用(我添加了额外的包含) eclipse 不再将代码标记为错误。

    当然,错误在额外包含中标记,但它不包含逻辑,所以你甚至不看那里。

    于 2013-08-21T05:04:12.980 回答