可能重复:
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