可能重复:
访问派生类中的受保护成员
如果我有一个抽象基类和一个从它派生的具体模板类,它有一个使用指向基类的指针的方法 - 派生类似乎不再将自己视为从它派生的:
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;
}
这与以下错误有关:
'virtual void AbstractBase::test()' 受保护
编译器没有错,肯定是protected
- 但如果Derived< T >
继承自AbstractBase
,为什么会抱怨?