2011-08-28 12 views
2

私はいくつかのデフォルト値を呼び出す必要があるメソッドsetValue(string& val)があります。
私はこのようにそれを呼び出すしたいと思います:char []を文字列に変換する方法&

setValue(""); 
setValue("random value"); 

が、私は、G ++で次のエラーを取得する:no matching function to call setValue(const char [10])

私は一時文字列オブジェクトを作成するの横に、これを行うことができる方法上の任意のアイデアを?
それは動作しますが、私はそれが不便見つける:

string temp("random value"); 
setValue(temp); 
+9

'string&'の代わりに 'const string&'を書くと、コンストラクタ 'string(const char *)'と配列の減衰のために動作します。 –

+3

おそらく、 'setValue'はあなたが渡す文字列に観測可能な変更を加えたいので、非コンス参照をとるでしょう。その場合、変更? –

+0

あなたはsugestionが私の答えです – Ha11owed

答えて

6

問題はstring&は唯一の非constのという名前オブジェクト(非const左辺値の標準言語で)に、一時的なオブジェクトに結合しないということです。 temp変数と同じように、関数に渡すオブジェクトの名前を付ける必要があります。

解決策の1つは、constの文字列への参照を使用し、文字列リテラルを直接渡すことです。これは、1)stringconst char*を受け入れる非明示的なコンストラクタを持っているために2)const char [10]const char*に崩壊するためです。

11

const string &を取るためにあなたの関数を変更します。

+0

非constリファレンスによる一時的な引き渡しは、間違いなく標準C++、少なくともC++ 98ではありません。 –