2012-11-12 2 views
3

가능한 중복 :회원을 찾을 수 없습니다

template<typename T> 
class Base { 
protected: 
    T t; 
}; 

template<typename T> 
class Derived: public Base<T> { 
public: 
    T get() { return t; } 
}; 

int main() { 
    Derived<int> d; 
    d.get(); 
} 

이 문제가 보호됩니다 :
Why do I have to access template base class members through the this pointer?

내가 다음과 같은 클래스 계층 구조를 가지고 member variable t is not found in the Base class. 컴파일러 출력 :

prog.cpp: In member function 'T Derived<T>::get()': 
prog.cpp:10:22: error: 't' was not declared in this scope 

올바른 컴파일러 동작입니까 아니면 컴파일러 버그입니까? 그것이 맞다면, 왜 그렇습니까? 가장 좋은 해결 방법은 무엇입니까? 완전한 이름을 사용

작동하지만, 불필요하게 자세한 것 같다 :

T get() { return Base<T>::t; } 
+1

'this->'를 사용해야합니다. 이것은 내가 믿는 복제품입니다. – Pubby

+0

감사합니다. 나는'this->'를 사용할 필요가 있다는 것을 몰랐다. 그래서 나는 이중 질문에서 아주 좋은 설명을 찾을 수 없었다. –

답변

2

this->와 접두사해야 템플릿 기본 클래스 구성원을 사용합니다.

template<typename T> 
class Derived: public Base<T> { 
public: 
    T get() { return this->t; } 
}; 
관련 문제