2016-09-28 3 views
0

У меня есть этот код для реализации Queue на основе Node, и я должен расширять абстрактный класс 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; 
}; 

я получаю ошибку expected class name before '{' token хотя я включал заголовочный файл QueueInterface. Почему это происходит?

+1

Скорее всего, опечатка в 'Node.h' или' QueueInterface.h'. – NathanOliver

+0

Нет. Я проверил. Также почему опечатка в 'Node.h' забрасывает эту ошибку – pyro97

+0

Это будет праздничный праздник, не зная содержимого других файлов. Можете ли вы уменьшить их все как можно больше, все еще получая ошибку? TIA (P.S: мои деньги пропали без вести, в конце объявления класса) – Borgleader

ответ

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; 
}; 
Смежные вопросы