C ++, Неверное преобразование из «char» в «const char *» - PullRequest
8 голосов
/ 12 октября 2011

В 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 строки?

Ответы [ 4 ]

10 голосов
/ 12 октября 2011

Сообщение об ошибке сообщает вам все, что вам нужно знать - вы пытаетесь передать параметр char, где требуется const char *.

Вам просто нужно изменить:

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

до:

expression_input.insert(0,"(");
expression_input.append(")");
4 голосов
/ 12 октября 2011

Не существует std::string::insert, который занимает только позицию и символ.То, что вы хотите, это insert(0, 1, '('), который вставляет 1 символ в позицию 0.

То же самое касается std::string::append: append(1, ')')

3 голосов
/ 12 октября 2011

Теперь я не понимаю, почему компилятор говорит, что я конвертирую из char в const char *.

Причина, по которой вы получаете ошибку компиляции, заключается в том, что нет соответствующей перегрузки для набора аргументов, передаваемых методу. Компилятор пытается найти наиболее близкое соответствие, которое в вашем случае char и const char*, а затем сообщает об этой ошибке.

Пожалуйста, помогите мне.

Существует 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(")");

Есть много возможностей, просто выберите тот, который вы считаете наиболее читабельным или подходящим для вашей ситуации.

0 голосов
/ 12 октября 2011

используемая версия функции string :: insert требует использования const char *, который вы используете вместо char * "1001 *

здесь есть ссылка на документацию метода

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...