2010-04-12 5 views
11

다음 foo 클래스의 멤버가 있습니다.클래스에서 this로 반환 참조

foo &foo::bar() 
{ 
    return this; 
} 

하지만 컴파일러 오류가 발생합니다. 무슨 멍청한 짓을하는거야?

컴파일러 오류 (GCC) : 오류 : 'foo는 *의 CONST'

답변

21

this 유형의 임시의 유형 'foo는 &'의 const가 아닌 참조의 잘못된 초기화 포인터입니다. 그래야합니다 return *this;

+0

감사합니다. 나는 이것을 알아야합니다. – Thomas

6

Naveen이 지적한대로 *this을 반환해야합니다.

약간의 애매한 컴파일러 오류의 의미를 파악하는 방법은 다른 컴파일러로 컴파일하여 더 나은 메시지가 있는지 확인하는 것입니다. 예를 들어 Comeau online을 사용할 수 있습니다. 그것은 제공이 경우

: -하지만 어떤 경우에는 메시지가 더 나은 방법이다가이 경우에 더 나은

"ComeauTest.c", line 7: error: initial value of reference to non-const must be an 
      lvalue 
    return this; 
      ^

확실하지.

+0

+1 빠른 팁. 그것은 정말로 분명해질 수 있습니다. – Francesco

+1

실제로 MSVC 2008 반환 "오류 C2440 : '반환': 'foo * const'에서 'foo &'"로 변환 할 수 없습니다. "나는 꽤 명확하다고 생각합니다. –

관련 문제