2011-10-11 18 views
8

In C++ ho questo programma:C++, la conversione non valida dal 'char' a '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(')'); 
} 

Sto ottenendo il seguente errore:

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>]’ 

Dove mi sto convertendo da char a const char*? Non posso inserire un carattere nella posizione 0 di una stringa?

risposta

10

Il messaggio di errore indica tutto ciò che è necessario sapere: si sta tentando di passare un parametro char in cui è richiesto un const char *.

Hai solo bisogno di cambiare:

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

a:

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

Non c'è std::string::insert che richiede solo una posizione e un carattere. Quello che vuoi è insert(0, 1, '('), che inserisce 1 carattere alla posizione 0.

Lo stesso vale per std::string::append: append(1, ')')

0

la versione della funzione di stringa :: insert si sta utilizzando richiede const char * che si sta mettendo in uso char "invece di '

ecco un link per metodo di documentazione

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

+0

-1: Si può sicuramente usare 'insert' con un' char'. Devi solo usare un diverso sovraccarico di esso. –

+0

credo di non aver menzionato che non funziona per la funzione string :: insert che usa la firma che usa – minus

3

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

Il motivo per cui si verifica un errore di compilazione è dovuto al fatto che non esiste un sovraccarico corrispondente per l'insieme di argomenti che si stanno passando al metodo. Il compilatore tenta di trovare la corrispondenza più vicina, che nel tuo caso è char e const char*, quindi segnala tale errore.

Please help me out.

ci sono 8 sovraccarichi per std::string::insert e 6 sovraccarichi per std::string::append. Avete molte opzioni differenti come:

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

o

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

o anche

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

C'è molte possibilità, basta scegliere quella che si trova più leggibile o sutiable per la situazione.

Problemi correlati