【问题标题】:Dereference operator for unique_ptr does not work in Eclipseunique_ptr 的取消引用运算符在 Eclipse 中不起作用
【发布时间】:2012-06-24 15:00:53
【问题描述】:

按照this post 中的步骤操作后,我设法让 Eclipse (Indigo) 识别unique_ptr(以及其他 C++11 新内容)。问题是 Eclipse 似乎不支持 operator-> for unique_ptr。这里有一个例子:

class Foo { void bar() { /* ... */ } };

std::unique_ptr<Foo> foo;
(*foo).bar(); // 1
foo->bar();   // 2

案例1 按预期工作:没有错误并且自动完成工作。然而,对于2 的情况,Eclipse 将语句标记为错误(“方法 'bar' 无法解析”),并且来自foo-&gt; 的自动完成功能不起作用。

最有趣的是,我对std::shared_ptr 没有任何问题。它只发生在std::unique_ptr

有没有人遇到过同样的问题?有谁知道解决方法吗?

编辑: 只是为了澄清目的,上面显示的代码 sn-p 的编译过程很好。所以,问题不在于编译器本身,而在于 Eclipse。

【问题讨论】:

  • @dirk:问题是关于 IDE 中的自动完成和静态 lint-picking;没有提到编译问题。
  • @dirkgently 我使用的是 g++ 4.6,所以编译正常。该问题仅影响 Eclipse。
  • @Rock:对。我错过了那一点。
  • 即使编译器还不完全支持 C++11,所以我希望 eclipse(众所周知,它落后)在编译器支持之后才支持它。
  • 我曾经使用 CDT 开发 C++ 应用程序,但我发现它的方法(单独理解 C++ 语义,从而在不依赖外部编译器的情况下给您带来错误)非常糟糕。有趣的不可能练习:尝试让 eclipse 不抱怨 CLOCKS_PER_SEC(这显然是一个宏,它没有在任何标题中定义,因为它是“虚拟的”)未定义。他们应该像 XCode 那样做:将 CDT 与 LLVM 的出色基础架构集成并使用它。同时,我切换回 GVim,我是一个更快乐的开发者。

标签: c++ eclipse c++11 eclipse-cdt unique-ptr


【解决方案1】:

我终于在 CDT 中找到了一个bug report,描述了我正在遭受的同样问题。到目前为止,还没有真正解决该问题,但该错误报告中解释了一种解决方法:

是的,GCC 4.5 是最新的 GCC 版本,其库头文件可以准确 由 CDT 索引。未能索引 4.6 标头的主要原因是 CDT 缺乏 支持 'constexpr' 和 'nullptr',它们在 4.6 中广泛使用 标头(顺便说一句,是否有可能为 Juno 实现?)。

我已经通过在我的电脑上安装了 GCC 4.5 和 4.6 来解决这个问题 系统,并将 CDT 指向 4.5 的头文件(通过设置编译器调用 在发现选项中使用 'g++-4.5' 命令),而实际使用 4.6 进行编译。

【讨论】:

    【解决方案2】:

    此问题最近已在 cdt 8.1.1 中得到修复。只需转到help->检查更新,它就会被下载并安装。我已经测试了 unique_ptr 并且它被正确索引了。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 2016-10-16
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多