2012-11-12 48 views
3

可能重複:
Why do I have to access template base class members through the this pointer?找不到成員

我有一個類層次結構如下所示:

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(); 
} 

的問題是保護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; } 
};