在C ++中我有这个程序:
#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>]’
我从char
转换为const char*
的位置?我不能在字符串的第0位插入一个字符吗?
答案 0 :(得分:10)
错误消息会告诉您需要知道的所有内容 - 您尝试传递char
参数,其中const char *
是必需的。
你只需要改变:
expression_input.insert(0,'(');
expression_input.append(')');
为:
expression_input.insert(0,"(");
expression_input.append(")");
答案 1 :(得分:4)
没有std::string::insert
只占用一个位置和一个角色。你想要的是insert(0, 1, '(')
,它在0位置插入1个字符。
同样适用于std::string::append
:append(1, ')')
答案 2 :(得分:3)
现在我不明白为什么编译器说我正在从char转换为const char *。
您收到编译错误的原因是因为您传递给方法的参数集没有匹配的重载。编译器尝试查找最接近的匹配项(在您的情况下为char
和const char*
),然后报告该错误。
请帮帮我。
std::string::insert 有8次重载, std::string::append 有6次重载。您有许多不同的选项,例如:
expression_input.insert(0, "(");
expression_input.append(")");
或
expression_input.insert(expression_input.begin(), '(');
expression_input.append(")");
甚至
expression_input.insert(0, 1, '(');
expression_input.append(")");
有很多种可能性,只需选择一种您认为最适合您情况的可读或适合您的情况。
答案 3 :(得分:0)
你正在使用的string :: insert函数的版本需要使用const char *你要使用char而不是'
这是方法文档的链接