2

我正在尝试使用 C++11,但 Eclipse 遇到了一些问题。我已经使用 macports 来获取 gcc48,并且我已经按照各种指南让 eclipse 使用新的编译器,包括thisthis,并且我还将编译器命令从 eclipse 标准更改为 g++-mp-4.8正如这里所解释的

我正在尝试构建以下程序:

#include <iostream>
 #include<memory>
using namespace std;
int main() {
std::unique_ptr<double> ptr(new double);
*ptr = 11.345;

cout << (*ptr) << endl;

return 0;
}

终端会很好地编译这个,

make all 
Building file: ../src/C++11.cpp
Invoking: Cross G++ Compiler
/opt/local/bin/g++ -I/opt/local/bin -I/opt/local/include -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -MMD -MP -MF"src/C++11.d" -MT"src/C++11.d" -o "src/C++11.o" "../src/C++11.cpp"
Finished building: ../src/C++11.cpp

Building target: C++11
Invoking: Cross G++ Linker
g++  -o "C++11"  ./src/C++11.o   
Finished building target: C++11

并且程序按预期运行。但是,在 Eclipse 中,我仍然收到错误消息Symbol 'unique_ptr' could not be resolved

我想继续使用 eclipse,而不仅仅是项目经理和 makefile 构建器,所以对此的任何帮助将不胜感激!

4

1 回答 1

3

可以使用clang++,而不是使用g++。我在编译一些简单的 c++ 代码时使用了答案Error , clang 3.1 can't see unique_ptr? 以及如何在 Mac 上的 Eclipse CDT 上编译 C++0x 代码?作为提出以下步骤的指南:

  1. 在 Project->Properties->C/C++ Build -> Settings -> Gcc C++ Compiler -> Command 中更改编译器(将 g++ 更改为 clang++)。

  2. 在 Project->Properties->C/C++ Build -> Settings -> Gcc C++ Compiler -> Miscellaneous 中,附加-std=c++11 -stdlib=libc++到标志。

  3. 对 C/C++ Build -> Settings -> Gcc C++ Linker -> Command 下的链接器执行相同的操作

  4. 在 Properties->C/C++ Build -> Settings -> Gcc C++ Linker -> Miscellaneous 中,添加-stdlib=libc++到 Linker 标志。

  5. 在 Properties->C/C++ General -> Preprocessor Include Paths, Macros,etc -> Providers -> CDT GCC Builtin Compiler Settings 中,关闭 Share 选项,并附-std=c++11加到 Command 以获取编译器规范。

编译工作完美,程序运行良好。那个 Eclipse 无法识别智能指针似乎是一个错误:请参阅关闭 Eclipse 错误(这不是真正的错误)

于 2013-07-10T12:34:58.373 回答