【问题标题】:C++, Invalid conversion from ‘char’ to ‘const char*’C++,从‘char’到‘const char*’的无效转换
【发布时间】:2011-10-11 21:32:50
【问题描述】:

在 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 插入一个字符吗?

【问题讨论】:

    标签: c++ string pointers


    【解决方案1】:

    错误消息告诉您您需要知道的一切 - 您正在尝试传递 char 参数,其中需要 const char *

    你只需要改变:

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

    到:

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

    【讨论】:

      【解决方案2】:

      没有std::string::insert 只占用一个位置和一个字符。你想要的是insert(0, 1, '('),它在位置0插入1个字符。

      std::string::append 也是如此:append(1, ')')

      【讨论】:

        【解决方案3】:

        现在我不明白为什么编译器说我正在从 char 转换为 const char*。

        您收到编译错误的原因是您传递给该方法的参数集没有匹配的重载。编译器尝试找到最接近的匹配项,在您的情况下为 charconst 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(")");
        

        有很多可能性,只需选择您认为最易读或最适合您的情况的一种。

        【讨论】:

          【解决方案4】:

          您正在使用的 string::insert 函数的版本需要 const char* 您在 char 中使用 " 而不是 '

          这里是方法文档的链接

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

          【讨论】:

          • -1:您当然可以使用insertchar。您只需要使用不同的重载即可。
          • 我想我没有提到它不适用于使用他的签名的 string::insert 函数
          猜你喜欢
          • 1970-01-01
          • 2014-02-05
          • 1970-01-01
          • 1970-01-01
          • 2016-01-20
          • 1970-01-01
          • 1970-01-01
          • 2017-03-19
          • 1970-01-01
          相关资源
          最近更新 更多