扩展模板抽象类时出错

时间:2016-09-28 18:51:44

标签: c++ templates inheritance

我有基于节点的队列实现的代码,我应该扩展一个名为QueueInterface的抽象类。

template<typename T>
struct QueueInterface {
    public:
    virtual ~QueueInterface(){};
    virtual bool isEmpty() const = 0;
    virtual void enqueue(const T value) = 0;
    virtual void dequeue() throw(PreconditionViolationException) = 0;
    virtual T peekFront() const throw(PreconditionViolationException) = 0;
};    

template<typename T>
struct Queue : QueueInterface {
    Queue();
    ~Queue();
    bool isEmpty() const;
    void enqueue(const T value);
    void dequeue() throw(PreconditionViolationException);
    T peekFront() const throw(PreconditionViolationException);

private:
    Node<T>* front;
    Node<T>* back;
};

即使我包含了QueueInterface头文件,我仍然收到expected class name before '{' token错误。为什么会这样?

1 个答案:

答案 0 :(得分:1)

QueueInterface不是一个班级。您可以从不是结构或类的东西继承。这就是所谓的模板类。您可以在模板化类之前使用template<...>识别模板。您必须指定一个类型,以便编译器可以创建该类型的类。

在您的情况下,您正在尝试创建一个也是模板的结构。通过查看基类方法的覆盖,我猜您正在尝试这样做:

template<typename T>
struct Queue : QueueInterface<T> { 
    //   notice that there ---^--- you are sending the required parameter

    // defaulted members are good.
    Queue() = default;

    // override too.
    bool isEmpty() const override;
    void enqueue(const T value) override;
    void dequeue() throw(PreconditionViolationException) override;
    T peekFront() const throw(PreconditionViolationException) override;

private:
    Node<T>* front;
    Node<T>* back;
};