2011-08-28 8 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'는 당신이 전달하는 문자열에 대해 관찰 가능한 변경을하고 싶기 때문에 'const'가 아닌 참조를 취합니다.이 경우에는'string' 변수를 볼 필요가 없습니다. 변화? –

+0

당신이 sugestion이 나를위한 답입니다 – Ha11owed

답변

6

문제는 string&가 (표준 언어로을 lvalues ​​const가 아닌) 만 객체라는 비 const를 에, 임시 개체에 바인딩 할 것입니다. temp 변수와 마찬가지로 함수에 전달할 객체의 이름을 지정해야합니다.

한 가지 해결 방법은 const 문자열에 대한 참조를 사용하고 문자열 리터럴을 직접 전달하는 것입니다. 이것은 1) stringconst char*을 허용하는 명시 적이 지 않은 생성자를 가지고 있기 때문에 2) const char [10]const char*으로 감소 할 것이기 때문입니다.

11

const string &을하는 함수를 수정합니다.

+0

비 const 레퍼런스에 의한 임시 전달은 확실히 표준 C++이 아닙니다. 적어도 C++ 98은 아닙니다. –

관련 문제