我有基于节点的队列实现的代码,我应该扩展一个名为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
错误。为什么会这样?
答案 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;
};