我已经获得了一些我在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
如果你不相信我,你可以自己重现这个问题。它是相同的代码,如果你愿意,你可以自己看看。
答案 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基本上说同样的事情。