2011-10-11 18 views
8

++私は、このプログラムがあります。C++、に '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(')'); 
} 

を私は次のエラーを取得しています:

私は変換アム
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>]’ 

charconst char*?文字列の位置0に文字を挿入できませんか?

答えて

10

エラーメッセージには、あなたが知る必要があるすべての情報が表示されます。charパラメータをconst char *にする必要があります。

あなただけ変更する必要があります。

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

へ:

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

のみ位置と文字を取る何std::string::insertはありません。何が欲しいの位置を0

で1つの文字を挿入する、insert(0, 1, '(')で同じことがstd::string::appendのために行く:append(1, ')')

0

文字列のバージョン::使用している挿入機能を使用すると、char型の使用中に入れている*のconst char型が必要です「代わりに

'は、ここでメソッドのドキュメントへのリンクが

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

+0

-1:ほとんどの場合、 'insert'を' char'で使うことができます。あなたはちょうどそれの異なる過負荷を使用する必要があります。 –

+0

私はそれが使用して署名を使用する文字列::挿入関数では動作しませんが言及に失敗したと思います – minus

3

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

です

コンパイルエラーが発生する理由は、メソッドに渡す引数セットに一致するオーバーロードがないためです。コンパイラは、あなたのケースではcharconst char*の最も近い一致を見つけようとし、そのエラーを報告します。

Please help me out.

std::string::appendためstd::string::insertと6過負荷のための8つのオーバーロードがあります。あなたは、次のような多くの異なるオプションがあります。

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

または

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

あるいは

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

多くの可能性がありますが、ちょうどあなたがあなたの状況に最も読みやすいかsutiable見つけるのいずれかを選択します。

関連する問題