cannot instantiate abstract class
I have a c++ applicaiton (as below) and I'm getting a linker error
that has me stumped. error C2259: 'myspace::PolicyImpl<T>': cannot
instantiate abstrace class.
If it's obvious to anybody what I'm doing wrong, please let me know.
Thanks,
PaulH
// MyClass.h
namespace myspace {
template< typename T, template< typename > class ClassPolicy =
Policy >
class ClassA
{
public:
virtual void Update( const T& hint ) = 0;
};
template < typename T >
class Policy
{
public:
virtual void RemoveAll( ClassA< T, myspace::Policy > *p ) = 0;
virtual void Add( ClassB< T, myspace::Policy > *p ) = 0;
virtual void Remove( ClassB< T, myspace::Policy > *p ) = 0;
};
}
// MyClassImpl.h
namespace myspace {
template< typename T, template< typename > class ClassPolicy =
PolicyImpl >
class ClassAImpl : public ClassA< T, ClassPolicy >
{
public:
virtual ~ClassAImpl()
{
//...
}
void Update( const T& hint )
{
//...
}
private:
ClassPolicy< T > classpolicy_; // ***linker ERROR C2259
here***
};
template < typename T >
class PolicyImpl : public Policy< T >
{
public:
PolicyImpl(){};
void RemoveAll( ClassA< T, myspace::PolicyImpl > *p )
{
//...
}
void Add( ClassB< T, myspace::PolicyImpl > *p )
{
//...
}
void Remove( ClassB< T, myspace::PolicyImpl > *p )
{
//...
}
private:
//...
};
}
The full text of the error message is:
1>MyClassImpl.h(45) : error C2259: 'myspace::PolicyImpl<T>' : cannot
instantiate abstract class
1> with
1> [
1> T=ClientConnectMsg
1> ]
1> due to following members:
1> 'void
myspace::Policy<T>::RemoveAll(myspace::ClassA<T,ClassPolicy> *)' : is
abstract
1> with
1> [
1> T=ClientConnectMsg,
1> ClassPolicy=myspace::Policy
1> ]
1> ClassA.h(43) : see declaration of
'myspace::Policy<T>::RemoveAll'
1> with
1> [
1> T=ClientConnectMsg
1> ]
1> MyClassImpl.h(60) : see reference to class template
instantiation 'myspace::ClassAImpl<T,ClassPolicy>' being compiled
1> with
1> [
1> T=ClientConnectMsg,
1> ClassPolicy=myspace::PolicyImpl
1> ]
1> MyClassImpl.h(57) : while compiling class template member
function 'myspace::ClassBImpl<T>::~ClassBImpl(void)'
1> with
1> [
1> T=ClientConnectMsg
1> ]
1> UsingClass.h(61) : see reference to class template
instantiation 'myspace::ClassBImpl<T>' being compiled
1> with
1> [
1> T=ClientConnectMsg
1> ]