无法在Linux上运行to_string()函数

时间:2015-03-07 19:54:22

标签: c++ linux linuxmint

我已经获得了一些我在Mac OS X上运行的代码,这些代码无法在运行Linux Mint的虚拟机上编译。这是一个简单的例子。当我在Mac上运行时,一切都很好,但是当我在Linux上运行相同的代码时我遇到了问题,所以我假设我所包含的库不存在,但是我应该然后得到一个包含错误?

这是在Mac上运行的示例代码。

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <cstdlib> 
using namespace std; 

int main(){
        for (int i = 0; i < 10; i++){
                string test = to_string(i); 
                cout << test << endl;
        }
        cout << "done" << endl;
        return 0;
}

我在这里没有遇到任何问题,但在Linux Mint上运行,我在尝试编译时得到了这个:

for.cpp: In function 'int main()':
for.cpp:7:28 error: 'to_string' was not declared in this scope
    string test = to_string(i); 
                             ^
make: *** [for] Error 1

我错过了什么吗?任何帮助将非常感激!

修改

我意识到我忘记在这里包含<string>并修复它,但我更改的内容(包括<string>)仍然无法在Linux上编译。我之前使用过to_string。我在C ++中知道的很多。我还尝试添加<cstdlib>。再一次,这个DOES在Mac上编译,并且不能在Linux上编译。

这是我的OSX输出:

0
1
2
3
4
5
6
7
8
9
done

这是我在Linux Mint上的输出(再次,Virtual Box,g ++ make):

test.cpp: In function ‘int main()’:
test.cpp:9:28: error: ‘to_string’ was not declared in this scope
   string test = to_string(i); 
                            ^
make: *** [test] Error 1

如果你不相信我,你可以自己重现这个问题。它是相同的代码,如果你愿意,你可以自己看看。

2 个答案:

答案 0 :(得分:4)

像这样编译for.cpp文件:

g++ -std=c++11 for.cpp

并运行:

./a.out

该语言的C ++ 11版本中添加了to_string标头中<string>函数的支持,因此您需要告诉GCC使用该版本。您也可以使用c++0x标志,例如:

g++ -std=c++0x for.cpp

你不必担心<cstdlib>,这与它无关...... to_string()<string>中定义,如果您正在使用C ++ 11进行编译(但未定义,或者如果您使用早期版本的C ++编译,则不可定义为扩展功能)。

参考:http://en.cppreference.com/w/cpp/string/basic_string/to_string

答案 1 :(得分:-3)

解决方案:

我找到了更好的解决方案。出于某种原因,我读过stdlib.h将无法在某些Linux系统上运行。我使用了不同的功能将int转换为string

在linux上:

#include <stdio.h>

然后

for (int i = 0; i < 10; i++){
    char buffer[10]; 
    sprintf(buffer,"%d",i); 
    string stringInt = buffer; 
    cout << stringInt << endl;
    // do whatever you want with the string
}

修改

对于那些投票支持我的解决方案的人来说,这里是六年前的一个post基本上说同样的事情。