【问题标题】:Eclipse indexer can't resolve shared_ptrEclipse 索引器无法解析 shared_ptr
【发布时间】:2011-11-29 14:55:20
【问题描述】:

在互联网上对此进行研究后,我无法让 Eclipse 索引器从 GCC 4.4.4 附带的 C++0x 添加中解析“shared_ptr”。我确保使用 Eclipse 的正确包含创建我的项目,所以它肯定在 4.4.4 包含文件夹中查找。

程序编译并运行良好。要访问 shared_ptr,我正在使用“#include ”。

知道是什么破坏了索引器吗?

【问题讨论】:

标签: c++ eclipse c++11


【解决方案1】:

您需要将预处理器符号“__GXX_EXPERIMENTAL_CXX0X__”设置为 Eclipse 项目。 g++ 会在您使用 '-std=c++0x' 时自动添加,但 eclipse 不知道这一点,因此它将相关标头的这些部分视为禁用。

【讨论】:

  • @AnschelSchaffer-Cohen:项目属性 - C/C++ 常规 - 路径和符号 - 符号 - GNU C++
  • 您可以通过在项目属性中C/C++ Build的Discovery选项中的“编译器调用参数”中添加-std=c++0x来自动添加。
  • @DaveS - 嗨,很抱歉用一个老问题打扰您,但是添加符号 __GXX_EXPERIMENTAL_CXX0X__ 对我不起作用,还有其他建议吗?提前 ;)
  • @Matteo 你最后是怎么做到的?
  • 我已将 -std=c++11 标志添加到 C++ -> Build -> Settings -> Discovery -> CDT GCC Built-in Compiler Settings 以及添加 GXX_EXPERIMENTAL_CXX0X 符号,如@DaveS 所述。然后为了一些额外的“魔法”,关闭 eclipse 并重新打开它。这似乎解决了 Eclipse Luna 中的问题
【解决方案2】:

我在使用 Eclipse 4.5.1 (Mars.1) 和 Cygwin 2.3.0 (GCC 4.9.3) 的 Windows 下遇到了这个问题。

索引器找不到 shared_ptr,因为 标头中有这样的行。 __cplusplus 宏正在评估 C++ 11(又名 201103)以外的其他内容,因此包含较旧的 auto_ptr.h 而不是 shared_ptr.h。为什么?下面的项目属性屏幕截图显示在 CDT GCC 内置编译器设置下检测到 C++ 98 (199711)。

#if __cplusplus >= 201103L
#  include <bits/shared_ptr.h>
#else
#  include <backward/auto_ptr.h>
#endif

告诉 Eclipse 使用 C++ 有两种可能的解决方案:

  • 在同一个预处理器包含路径屏幕上,滚动到设置条目区域的顶部。展开 CDT 用户设置条目。为 __cplusplus=201103L 添加一个新的预处理器宏。对发布和调试配置执行此操作。然后重建索引。

  • 如果您想默认 CDT GCC 内置编译器设置为所有项目使用 201103,然后编辑 language.settings.xml 文件(在 Windows 下为 c:\Users\deanhill\workspace\。元数据\.plugins\org.eclipse.cdt.core\language.settings.xml)。设置 __cplusplus=201103L。重启 Eclipse 并重建索引。

【讨论】:

  • 我在/usr/include/c++/4.8.2找到了我的
  • 奇怪的是,我在 Eclipse 中使用 C++11 功能很长时间,有一天突然出现了这个问题。我在 IDE 之间跳了好几次才回来,终于找到了这个答案。
  • 在 Neon.2 (4.6.2) 上为我工作。
【解决方案3】:

虽然我迟到了,但这对我有用:

右键Project->Properties->C/C++ General->Preprocessor Include Paths, Macros等 --> 点击“Providers”标签 --> CDT GCC Built-in Compiler Settings

取消选中“使用项目之间共享的全局提供程序”

添加-std=c++0x

然后它看起来像这样:

${COMMAND} ${FLAGS} -E -P -v -dD -std=c++0x "${INPUTS}"

重建索引。

使用 Debian Jessie + Eclipse Kepler 构建 ID:20140224-0627

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。我已将 GXX_EXPERIMENTAL_CXX0X 以及 -std=c++11 添加到工作区的编译器选项中。但是它并没有解决我的问题。

    我又错过了一步: 右键单击 Project->Properties->C/C++ Build->Settings->Cross G++ Compiler->Miscellaneous->Other flags 我变了 -c -fmessage-length=0-c -fmessage-length=0 -std=c++11

    现在 Eclipse 可以看到 std::shared_ptr 并正确索引它。

    【讨论】:

    • 我也更改了构建设置,仍然 eclipse 无法索引 std::shared_ptr
    【解决方案5】:

    对我来说,它通过在下面设置 other dialect flags = -std=c++11 起作用:

    首选项 -> C++ 构建 -> 设置 -> GCC C++ 编译器 -> 方言

    以及在下面添加-std=c++11

    Preferences -> C++ General -> Preprocessor Include Path -> Providers -> CDT GCC Build-in Compiler Settings -> 获取编译器规范的命令

    不要忘记清理和重建您的项目/索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-20
      • 2014-04-01
      • 2018-04-04
      • 2020-06-10
      • 2018-12-12
      • 1970-01-01
      • 2016-04-29
      相关资源
      最近更新 更多