我有以下代码:
template <typename T>
class ListBase
{
protected:
int _size;
public:
ListBase() {_size=0;}
virtual ~ListBase() {}
bool isEmpty() {return (_size ==0);}
int getSize() {return _size;}
virtual bool insert(int index, const T &item) = 0;
virtual bool remove(int index) = 0;
virtual bool retrieve(int index, T &item) = 0;
virtual string toString() = 0;
};
我的第二个文件定义了一个子类:
#define MAXSIZE 50
template <class T>
class ListArray : public ListBase
{//for now to keep things simple use int type only later upgrade to template
private:
T arraydata[MAXSIZE];
public:
bool insert(int index,const T &item)
{
if(index >= MAXSIZE)
return false;//max size reach
if (index<0 || index > getSize() )//index greater than array size?
{
cout<<"Invalid index location to insert"<<endl;
return false;//invalid location
}
for(int i = getSize()-1 ; i >= index;i--)
{//shift to the right
arraydata[i+1]=arraydata[i];
}
arraydata[index] = item;
_size++;
return true;
}
string ListArray::toString()
{
ostringstream ostr;
ostr<<"[";
for(int i = 0; i < _size;i++)
ostr<<arraydata[i]<<' ';
ostr<<"]"<<endl;
return ostr.str();
}
};
我的main.cpp:
int main()
{
ListArray<char> myarray;
myarray.insert(0,'g');
myarray.insert(0,'e');
myarray.insert(1,'q');
cout<<myarray.toString();
}
我似乎无法弄清楚如何使用带有子类的模板。当我编译我的代码时,我收到以下错误:
错误C2955:'ListBase':使用类模板需要模板参数列表 请参阅正在编译的类模板实例化'ListArray'的引用
答案 0 :(得分:10)
您没有为ListBase指定模板参数。
template <class T>
class ListArray : public ListBase<T>
---
答案 1 :(得分:7)
class ListArray : public ListBase
应该是
class ListArray : public ListBase<T>
你在访问基类成员时遇到了很多问题。请参阅:Accessing inherited variable from templated parent class。