可能重複:
Accessing protected members in a derived class來自接口的模板 - 多態性停止工作?
如果我有一個抽象基類和從它派生的混凝土模板類,它具有一個使用指針的基類的方法 - 似乎派生類停止將其本身視爲派生自它:
class AbstractBase
{
protected:
virtual void test() = 0;
};
template < class T >
class Derived : public AbstractBase
{
public:
virtual void call(AbstractBase* d) { d->test(); } // Error!
protected:
virtual void test() {}
};
int main()
{
Derived<int> a;
Derived<int> b;
b.call(&a);
return EXIT_SUCCESS;
}
此錯誤與:
'虛擬無效AbstractBase ::測試()' 被保護
編譯器的沒有錯,這是絕對protected
- 但如果從AbstractBase
Derived<T>
繼承,它爲什麼抱怨?
這是不相關的模板。使派生一個非模板類,你會得到相同的錯誤。 – Mat 2012-08-04 14:45:37
+1你是對的,但在我的無知中,當我遇到問題時,我搜索了這個問題,所以我會把問題留給其他做同樣事情的人。 – cmannett85 2012-08-04 15:24:27