2011-10-11 51 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您的具体情况。