2011-10-11 87 views
8

在C轉換無效++我有這樣的程序:C++,從 '字符' 到 '爲const char *'

#include <iostream> 
using namespace std; 
int main(){ 
    string expression_input; 
    cout << "User Input: " << endl; 
    getline(cin, expression_input); 
    expression_input.insert(0, '('); //error happens here. 
    expression_input.append(')'); 
} 

我收到以下錯誤:

prog.cpp:15: error: invalid conversion from ‘char’ to ‘const char*’ 

prog.cpp:15: error: initializing argument 2 of 
‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, 
_Traits, _Alloc>::insert(typename _Alloc::rebind<_CharT>::other::size_type, 
const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, 
_Alloc = std::allocator<char>]’ 

我在哪裏,我轉換從charconst char*?我不能在字符串的位置0插入一個字符嗎?

回答

10

錯誤消息告訴你一切你需要知道的 - 你試圖通過一個char參數,其中const char *是必需的。

你只需要改變:

expression_input.insert(0,'('); 
expression_input.append(')'); 

到:

expression_input.insert(0,"("); 
expression_input.append(")"); 
4

沒有std::string::insert是隻需要位置和角色。你想要的是insert(0, 1, '('),其中位置0

同樣插入1個字符無二std::string::appendappend(1, ')')

0

您使用字符串::插入功能的版本需要爲const char *你把在煤焦使用「而不是」

這裏是方法的文檔

http://www.cplusplus.com/reference/string/string/insert/

+0

-1:你當然可以使用'insert'和'char'。你只需要使用它的一個不同的重載。 –

+0

我想我沒有提到它不適用於使用簽名他使用的字符串::插入函數 – minus

3

Now I don't get why does the compiler says I am converting from char to const char*.

鏈接

您收到編譯錯誤的原因是因爲您傳遞給該方法的一組參數沒有匹配的重載。編譯器會嘗試查找最接近的匹配項,在您的案例中找到charconst char*,然後報告該錯誤。

Please help me out.

有8個重載std::string::insert和6重載std::string::append。你有很多不同的選擇,如:

expression_input.insert(0, "("); 
expression_input.append(")"); 

expression_input.insert(expression_input.begin(), '('); 
expression_input.append(")"); 

甚至

expression_input.insert(0, 1, '('); 
expression_input.append(")"); 

有很多可能性,只選擇一個您認爲最可讀或sutiable您的具體情況。