2012-09-27 78 views
13

我試圖將存儲在std::vector中的std::string轉換爲整數並將其作爲參數傳遞給函數。將std :: string轉換爲整數

這是我的代碼的簡化版本:

vector <string> record; 
functiontest(atoi(record[i].c_str)); 

我的錯誤如下:

error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’ 

我怎樣才能做到這一點?

+0

你需要*調用*,但也有很多比'atoi'更好的方法。 – chris

+3

Typo'record [i] .c_str' - >'record [i] .c_str()'。 – Hindol

回答

29

用C++ 11:

int value = std::stoi(record[i]); 
+4

相當有幫助。對於比C++ 11更低的版本,有沒有可靠的例子? –

+11

**讀者當心:**如果你不是100%確定輸入'std :: stoi'將**總是一個有效的整數**,你需要設置一個'try/catch' '的std :: invalid_argument'。 – CodeMouse92

+1

也適用於'std :: out_of_range'。 – ebk

11
record[i].c_str 

是不一樣的

record[i].c_str() 

實際上,你可以從錯誤信息得到這樣的:該函數需要const char*,但你提供const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const類型的參數,它是一個指向類std::basic_string<char, std::char_traits<char>, std::allocator<char> >的成員函數返回const char*並且不帶任何參數。

+0

哎呀!感謝隊友ahah –

+0

@Luchiab格里戈爾 –

+0

我可以看到其他答案如何更好,但我不認爲這一個值得downvote ... –

12

從標準庫使用stringstream。它的清潔,這是相當C++不是C.

int i3; 
std::stringstream(record[i]) >> i3; 
+0

或http:// en .cppreference.com/w/cpp/string/basic_string/stol –

+0

@BЈовић非常好。對於C++ 11,雖然 – Indy9000

+0

我猜它必須是流暢的 – javapowered

0
#include <boost/lexical_cast.hpp> 

functiontest(boost::lexical_cast<int>(record[i]));