为什么std :: stoi和std :: array没有用g ++ c ++ 11编译?

时间:2013-10-10 01:52:47

标签: c++ macos boost c++11 g++

在过去的几个月里,我一直在学习C ++和使用终端。我的代码使用g ++和C ++ 11编译并运行良好,但在最近几天它开始出错并且我在编译时遇到了问题。我可以编译和运行的唯一程序取决于较旧的C ++标准。

我首先遇到的错误与#include<数组>在头文件中。不知道为什么会这样,但我通过使用boost / array来解决它。我无法解决的另一个错误是使用std :: stoi。 array和stoi都应该在C ++ 11标准库中。我制作了以下简单代码来演示正在发生的事情:

//
//  stoi_test.cpp
//
//  Created by ecg
//

#include <iostream>
#include <string> // stoi should be in here

int main() {

    std::string test = "12345";
    int myint = std::stoi(test); // using stoi, specifying in standard library
    std::cout << myint << '\n'; // printing the integer

    return(0);

}

尝试使用ecg $ g ++编译-o stoi_trial stoi_trial.cpp -std = c ++ 11

  

array.cpp:13:22:错误:命名空间'std'中没有名为'stoi'的成员;你的意思是        '的atoi'?      int myint = std :: stoi(test);                  ~~~~~ ^ ~~~                       的atoi   /usr/include/stdlib.h:149:6:注意:'atoi'在这里声明   int atoi(con​​st char *);           ^   array.cpp:13:27:错误:没有来自'std :: string'的可行转换(又名        'basic_string')到'const char *'      int myint = std :: stoi(test);                            ^ ~~~   /usr/include/stdlib.h:149:23:注意:在这里将参数传递给参数   int atoi(con​​st char *);                            ^   产生了2个错误。

在使用gcc或clang ++和-std = gnu ++ 11时,我在编译时也会遇到这些错误(我猜它们都依赖于相同的文件结构)。无论我在代码中指定std ::还是指定使用namespace std;

,我也会得到相同的错误

我担心这些问题是因为9月命令行工具通过Xcode更新或因为我安装了boost而导致我的C ++ 11库混乱。希望有一个简单的解决方案。

我的系统:

  

配置: - prefix = / Applications / Xcode.app / Contents / Developer / usr --with-gxx-include-&gt; DIR =的/ usr /包括/ C ++ / 4.2.1   Apple LLVM 5.0版(clang-500.2.76)(基于LLVM 3.3svn)   目标:x86_64-apple-darwin12.5.0   线程模型:posix

感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:5)

clang有一个奇怪的stdlib,你需要在编译时添加以下标志

-stdlib=libc++

你的代码片段在我的Mac上运行

g++ -std=gnu++11 -stdlib=libc++ test.cpp -o test

answer描述了问题