2011-08-28 155 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

如果你編寫'const string&'而不是'string&',它將會因爲構造函數'string(const char *)'和數組衰減而工作。 –

+3

大概'setValue'需要一個非''constst'參考,因爲它想要對你傳入的字符串做出可觀察的改變。在這種情況下,你不需要任何情況下的本地'string'變量來看到變化? –

+0

你的消化是我的答案 – Ha11owed

回答

6

的問題是,string&不會綁定到臨時對象,只能到名爲對象非const的非const的標準語言左值)。您必須命名一個對象才能傳遞給您的函數,就像您對temp變量所做的一樣。

一種解決方法是對字符串使用const引用並直接將字符串文字傳遞給它。這是有效的,因爲1)string有一個非明確的構造函數,它接受const char* 2)const char [10]將衰減到const char*

11

修改你的函數採取const string &

+0

通過非const引用臨時傳遞絕對不是標準的C++,至少不是C++ 98。 –