2012-11-12 74 views
3

我試過很多方法,詳見這裏:http://www.cplusplus.com/forum/general/13135/不能把字符串轉換在C++到INT在LINUX

他們中的大多數工作,如果我在Windows上運行的文件,但是當我嘗試這樣做在LINUX上,它們都不起作用。 例如,我嘗試做:

string str = "123"; 
    int sp; 
    istringstream (str) >> sp; 

但它給我的錯誤:「無效的使用不完全類型的‘結構的std :: istringstream’ /usr/include/c++/4.4/iosfwd:67:錯誤:聲明'struct std :: istringstream'「

其他選項是'atoi',但它表示'atoi沒有在此範圍內定義。

任何想法爲什麼會發生?

+1

對於「atoi」#包括'。對於「istringstream」,'#include '。你還應該添加'using namespace std;' – paulsm4

+0

我不會建議使用* atoi *,它不符合ANSI標準。 C++ 11有* to_string *方法(請參閱http://en.cppreference.com/w/cpp/string/basic_string/to_string)。在較老的C++中,你可以嘗試類似* fprintf *的東西。 –

+0

@ user1818446想從字符串轉換爲int。而不是其他方式;) – Evert

回答

5

至於atoi()函數,您需要包含cstdlib(#include <cstdlib>)標頭。

那麼你可以使用它像這樣:

string str= "123"; 
int sp = atoi(str.c_str()); 

它會告訴字符串對象作爲一個const char *指向一個C風格的字符串(最有可能最知名與零字符串終止符\ 0)。

3

POSIX的方式隱蔽std::stringintatoi()

#include <cstdlib> 
... 
string str = "123"; 
int sp = atoi(str.c_str()); 

如果要轉換不僅int但種類很多,最好是使用stringstream。但是,請注意增加的編譯時間。

+0

是的,它的工作 - 我想我忘了添加'#包括' – TheEmeritus

+0

@ user1818446:接受? –

+0

'istringstream(str)>> sp;'也可以工作 - 請參閱我上面的評論。很高興你解決了:)! – paulsm4