不允许抽象类类型的对象 "Vector<LinkedList<int>>"

object of abstract class type "Vector<LinkedList<int>>" is not allowed

本文关键字:lt gt LinkedList int Vector 抽象类 类型 对象 不允许      更新时间:2023-10-16
template <class Type>
class AbstractVector : virtual public AbstractArrayClass<Type> {
public:
    virtual void insert(const Type& item, int index) = 0;
    virtual void remove(int index) = 0;
    virtual void add(const Type& item);
};
template <class Type>
class Vector : virtual public ArrayClass<Type>,
virtual public AbstractVector<Type>
{
protected:
    int _currSize;
    int _incFactor;
public:
    Vector();
    Vector(int n);
    Vector(int n, Type& val);
    Vector(const Vector<Type>& v);
    Vector(const ArrayClass<Type>& ac);
    virtual ~Vector();
    void operator= (const Vector<Type>& v);
    void operator= (const ArrayClass<Type>& ac);
    virtual void insert(Type& item, int index);
    virtual void remove(int index);
    virtual int size() const;
    virtual int capacity() const;
    virtual int incFactor(int f);
    void setIncFactor(int f);
    void setCapacity(int c);
};
template <class Type>
class LinkedList {
protected:
    Type* _info;
    LinkedList<Type>* _next;
public: 
    LinkedList<Type>();
    LinkedList<Type>(Type& val);
    LinkedList<Type>(int l, Type& val);
    LinkedList<Type>(LinkedList<Type>& list);
    void add(Type& val);
    void insert(Type& val, int k);
    void remove();
    void removeAt(int k);
    ~LinkedList();
    int size();
    Type& operator[] (int k);
    LinkedList<Type>& operator= (LinkedList<Type>& list);
};
template <class Type>
void Vector<Type>::insert(Type& item, int index) {
    if ((index < 0) || (index > _currSize)) {
        throw ArrayBoundsException();
    };
    // if new size is equal to maximum capacity increase it
    if (_currSize + 1 == _size) {
        setCapacity(_size + _incFactor);
    };
    // increment current size
    _currSize++;
    // copy all data
    for (int i = _currSize - 1; i > index; i--) {
        (*this)[i] = (*this)[i - 1];
    };
    // insert new item
    (*this)[index] = (Type)item;
}

来自 AbstractVector 类的插入函数是完全定义的,Vector 类的代码是由我们在课程中使用的教科书提供的,但我从每个接受过它的人那里听说提供的代码很糟糕。

当我尝试创建矢量时,

Vector<LinkedList<int>> v;

它抛出"acstract类类型"Vector>的对象"是不允许的:纯虚函数"AbstractVector::insert[with Type=LinkedList]"没有覆盖器"和C2259:"'Vector>':不能实例化抽象类。

我试图查看其他问题,但解决方案似乎主要表明该函数未在任何地方定义,事实并非如此。

看看你的insert声明和AbstractVector的声明之间的区别:

你:

virtual void insert(Type& item, int index);

AbstractVector

virtual void insert(const Type& item, int index) = 0;

请注意,您的缺少const