我在初始化类的对象时遇到问题,因为它认为该类是虚拟的

时间:2019-04-18 11:11:48

标签: c++ abstract

我正在尝试借助基于数组的序列实现Set容器。我知道它存在于c ++系统库中,这是任务。我有一个层次结构ASet abstartc类和一个Set作为其实现。麻烦本身出现在main()中,因为它说Set类是抽象的。

template<class Elem>
class Array {
public:
    explicit Array(size_t n);
    ~Array();
    //some functions
private:
    size_t _size;
    Elem* _allocator;
};

#include "Array.h"
template <class Elem>
class Sequence {
public:
    Sequence(const size_t capacity = _default) : _size(0), _allocator(new Array<Elem>(_size)) {
        return;
    };
    ~Sequence() {
        delete _allocator; return;
    }
    //some functions
private:
    size_t _size;
    static const size_t _default = 0;
    Array<Elem> * _allocator;
};


template <class Elem>
class ASet {
public:
    virtual ~ASet() = 0;
};

#include "Sequence.h"
template <class Elem>
class Set : public ASet<Elem> {
private:
    Sequence<Elem> *seq;
public:
    Set(const size_t size = 1) : seq(new Sequence<Elem> (size)) {}
    ~Set() {
        delete seq;
    }

    //some functions
};

不要介意类中的任何函数,没有它们,问题本身就在于在main()中创建对象:

#include "Set.h"
#include "ASet.h"
int main() {
    Set<int> s;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

更改

virtual ~ASet() = 0;

virtual ~ASet() = default;