C ++抽象类模板

时间:2012-02-19 10:34:38

标签: c++ class abstract

我有以下代码:

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'的引用

2 个答案:

答案 0 :(得分:10)

您没有为Lis​​tBase指定模板参数。

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