2011-08-28 1 views
2

У меня есть метод setValue(string& val), который мне нужно вызвать для некоторых значений по умолчанию.
Я хотел бы назвать это так:как преобразовать char [] в строку &

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

, но я получаю следующее сообщение об ошибке с г ++: no matching function to call setValue(const char [10])

любая идея о том, как я могу это сделать рядом с созданием объекта температуры строки?
Это работает, но я нахожу это неудобно:

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

Если вы пишете 'const string &' вместо 'string &', то оно будет работать из-за конструктора 'string (const char *)' и array decay. –

+3

Предположительно, 'setValue' принимает ссылку, отличную от 'const', потому что она хочет сделать видимые изменения в строке, в которую вы проходите. В этом случае вам не нужна локальная переменная' string' в любом случае, чтобы увидеть изменения? –

+0

вы sugestion - это ответ для меня – Ha11owed

ответ

6

Проблема заключается в том, что string& не будет связываться с временными объектами, только к не сопзИте именем объектов (неконстантной lvalues ​​ в стандартном языке). Вам нужно будет указать объект для перехода к вашей функции, как и для переменной temp.

Обходное решение заключается в использовании ссылки на строку и передать ее строковый литерал. Это работает, потому что 1) string имеет неявный конструктор, который принимает const char*. 2) const char [10] будет распадаться до const char*.

11

Измените функцию, чтобы взять const string &.

+0

Передача временного по не-const ссылки определенно не является стандартным C++, по крайней мере, не C++ 98. –