5

我正在玩 unique_ptr。在我一篇文章中,人们通过在编译期间指定 -std=c++0x 帮助我编译了一个使用该指针的程序。现在我想知道是否有任何方法可以指示 eclipse 在自动完成时考虑 c++11?
unique_ptr 不在 std:: 命名空间列表中,我也找不到与 unique_ptr 关联的方法(重置、移动...)。

谢谢你

4

2 回答 2

3

“memory”标头(可能位于 /usr/include/c++/4.9/memory)仅包括“unique_ptr.h”和“shared_ptr.h”(可能位于 /usr/include/c++/4.9/bits/unique_ptr。 h 和 /usr/include/c++/4.9/bits/shared_ptr.h) 如果宏“__cplusplus”等于或大于“201103L”。检查 memory.h 以查看第 69 行的“#if”预处理器条件(或搜索字符串“#if __cplusplus >= 201103L”)。

正如其他人所提到的,使用“-std=c++0x”或更高版本的 c++ 标准(-std=c++11 或 -std=c++14)进行编译可以解决编译错误,但不能解决 eclipse 索引和自动完成问题。

为了解决eclipse索引问题,我在项目构建属性中添加了“__cplusplus”预处理器宏,值为“201103L”,然后我刷新了索引;

添加预处理器宏:

“右键单击项目资源管理器上的项目”>>属性>> C / C ++常规>>预处理器包括>>条目>> GNU C++>> CDT用户设置条目>>添加...>>预处理器宏;

然后输入一个名称为“__cplusplus”且值为“201103L”的宏;

之后,要刷新索引,请执行以下操作:

“在项目资源管理器上右键单击项目”>>索引>>重建;

Ps.:我在 ubuntu 15.04 64bits 上使用 gcc 4.9.2 和 eclipse Luna (4.4.2)

于 2015-06-18T16:45:38.353 回答
1

我想你应该__GXX_EXPERIMENTAL_CXX0X__在 Eclipse 中为你的“路径和符号”添加定义。另请参阅此问题GNU C++ how to check when -std=c++0x is in effect? 同样的问题Eclipse indexer can't resolve shared_ptr for shared_ptr.

于 2012-03-19T08:39:38.290 回答