2011-10-11 4 views
8

En C++ J'ai ce programme:C++, conversion non valide de 'char' à '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(')'); 
} 

Je reçois l'erreur suivante:

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

Où suis-je suis en train de convertir de char à const char*? Est-ce que je ne peux pas insérer un caractère à la position 0 d'une chaîne?

Répondre

10

Le message d'erreur vous indique tout ce que vous devez savoir - vous essayez de passer un paramètre char où un const char * est requis.

Vous avez juste besoin de changer:

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

à:

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

Il n'y a pas std::string::insert qui ne prend que la position et un caractère. Ce que vous voulez est insert(0, 1, '('), qui insère 1 caractère à la position 0.

va de même pour std::string::append: append(1, ')')

0

la version string :: fonction d'insertion que vous utilisez nécessite const char * vous mettez en service char "au lieu de"

ici est un lien vers la documentation de la méthode

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

+0

-1: Vous pouvez très certainement utiliser 'insert' avec un' char'. Vous devez juste utiliser une surcharge différente. –

+0

je suppose que j'ai omis de mentionner que cela ne fonctionne pas pour string :: insert fonction qui utilise la signature de son utilisation – minus

3

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

La raison pour laquelle vous obtenez une erreur de compilation est qu'il n'y a pas de surcharge correspondante pour l'ensemble d'arguments que vous transmettez à la méthode. Le compilateur essaie de trouver la correspondance la plus proche, qui dans votre cas char et const char*, puis signale cette erreur.

Please help me out.

Il y a 8 pour std::string::insert surcharges et 6 pour std::string::append surcharges. Vous avez beaucoup d'options différentes telles que:

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

ou

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

ou même

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

Il y a beaucoup de possibilités, il suffit de choisir celui qui vous semble le plus lisible ou sutiable pour votre situation.

Questions connexes