2014-01-23 4 views
1

Eclipse CDT 인덱서/코드 분석기에 문제가 있습니다. 편집기에 다음 코드를 작성하면 const int* p = x.f();-Invalid arguments Candidates are: int * f()에 오류가 표시됩니다. 그래서 어떤 이유는 클래스 B의 방법 const T* f() const를 인식하지 못하는Eclipse CDT가 템플릿 클래스의 메소드를 해결할 수 없습니다.

template<typename T> 
class A { 
public: 
    const T* f() const { return 0; } 
}; 

template<typename T> 
class B : A<T> { 
public: 
    using A<T>::f; 
    T* f() { return 0; } 
}; 

void main() { 
    const B<int> x; 
    const int* p = x.f(); 
} 

가 발생합니까 어떻게 문제를 해결하기 위해 왜 어떤 아이디어?

답변

1

왜 그런가요? CDT의 C++ 파서 using A<T>::f 클래스 Bmain()const int* p = x.f()을 만족하는 멤버 함수를 선언하는 것으로 인식

실패하기 때문이다. const 한정자를 T* B::f()에 추가하여이를 확인할 수 있습니다. 이것은 파서를 만족시킵니다 (그러나 멤버 함수의 목적은 입니다).

어떻게 문제를 해결할 수 있습니까?

글쎄, 파생 클래스에서 기본 클래스 및 T* f()const T* f() const을 가지고 독특한 보인다. 이유가없는 한 두 멤버 함수 모두 A 또는 B (아마도 A)으로 선언 할 수 있습니다. 또한,하지만이 unattractively, 당신은 할 수 :

  • 그들에게 명시 적으로 규정 전화를 using A<T>::f;를 제거하고 와 const int* p = x.();을 대체 할 다른 이름, 어쩌면 ff_const, 또는
  • 을 부여 const int* p = x.A<int>::f();

당신은 도 수 파서의 혼란이 IDE에서 성공적으로 프로그램을 종료하지 않기 때문에을 무시하십시오. (컴파일러에 동의하지 않는 경우를 제외하고 실시간 C++ 파서를 사용하는 것이 좋습니다.)

관련 문제