C ++ абстрактный шаблон класса - PullRequest
3 голосов
/ 19 февраля 2012

У меня есть следующий код:

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 ]

11 голосов
/ 19 февраля 2012

Вы не указали параметр шаблона для ListBase.

template <class T>
    class ListArray : public ListBase<T>
                                     ---
7 голосов
/ 19 февраля 2012
class ListArray : public ListBase

должно быть

class ListArray : public ListBase<T>

И у вас куча проблем с доступом к членам базового класса.См .: Доступ к унаследованной переменной из шаблонного родительского класса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...