我有一个像这样的抽象类Icollection
:
using namespace std;
template <typename T>
class ICollection
{
public:
virtual void add(T) = 0;
virtual T get(int) = 0;
virtual int count() = 0;
};
和派生类ArdalanCollection
是这样的:
#include "iCollection.h"
#include <map>
template <typename T>
class ArdalanCollection :public ICollection<T>
{
public:
ArdalanCollection(){
index = 0;
};
virtual void add(T obj){
encapsolateImplementation.insert(make_pair(index++, obj));
};
virtual T get(int index){
return encapsolateImplementation[index];
};
virtual int count(){
return index;
}
private:
int index;
map < int, T > encapsolateImplementation;
};
现在我有另一个名为abs_class
的抽象类,如下所示:
class abs_class
{
public:
abs_class(){};
virtual int getT(int) = 0;
protected:
int Kg;
};
我想要做的是构建Icollection
abs_class
类型的对象,换句话说我想这样做:
ICollection<abs_class> *eles = new ArdalanCollection <abs_class>();
但我合理地得到了这个错误:
错误C2259:&#39; abs_class&#39; :无法实例化抽象类
有没有办法扭转这个错误?
答案 0 :(得分:2)
您指定abs_class
作为模板类型T
,但T
需要是可构造的,因为add
按值T
并且get
按值返回T
。
由于abs_class
是纯虚拟的,因此无法实例化。您可以改为使用abs_class*
,或者提供已定义getT
成员的继承类。
答案 1 :(得分:1)
您无法实例化抽象类。这意味着你无法使用: -
ICollection<abs_class> *eles;
但是你可以这样做: -
ICollection<abs_class*> *eles;