C++抽象类模板

use*_*499 3 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;
};
Run Code Online (Sandbox Code Playgroud)

我的第二个文件定义了一个子类:

#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();
    }
};
Run Code Online (Sandbox Code Playgroud)

我的main.cpp:

int main()
{
    ListArray<char> myarray;
    myarray.insert(0,'g');
    myarray.insert(0,'e');
    myarray.insert(1,'q');
    cout<<myarray.toString();
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何使用带有子类的模板.当我编译我的代码时,我收到以下错误:

错误C2955:'ListBase':使用类模板需要模板参数列表参见类模板实例化'ListArray'被编译的引用

Kar*_*ath 11

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

template <class T>
    class ListArray : public ListBase<T>
                                     ---
Run Code Online (Sandbox Code Playgroud)


Mat*_*Mat 7

class ListArray : public ListBase
Run Code Online (Sandbox Code Playgroud)

应该

class ListArray : public ListBase<T>
Run Code Online (Sandbox Code Playgroud)

而且你在访问基类成员时遇到了很多问题.请参阅:从模板化父类访问继承变量.