重複の可能性:
派生クラスの保護されたメンバーへのアクセス
抽象基本クラスと、それから派生した具体的なテンプレート クラスがあり、基本クラスへのポインターを使用するメソッドがある場合、派生クラスは自分自身を派生として認識しなくなったようです。
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
。