【发布时间】:2021-08-22 01:22:53
【问题描述】:
我想使用模板创建一个节点队列,以按级别顺序显示 BST 树。
我创建了一个抽象类Queue 派生自这个类,称为QueueVector,并且我有我的tree 文件。
我不明白为什么当我创建节点队列时代码无法编译并说did not override any base class methods
,但是如果例如我将 node 更改为 int,它就完美了。
这是一行:
Queue<Node>* q = new QueueVector<Node>;
我必须做什么才能创建节点队列
队列纯虚类
#pragma once
template <class T>
class Queue
{
public:
virtual void clear() = 0;
virtual void enqueue(int value) = 0;
virtual int dequeue() = 0;
virtual int front() = 0;
virtual bool isEmpty() const = 0;
};
队列向量
template <class T>
class QueueVector : public Queue<T>
{
public:
// constructor requires a starting size
QueueVector(int max = 100);
//QueueVector(const QueueVector&);
// implement Queue protocol
void clear() override;
T dequeue() override;
void enqueue(T value) override;
T front() override;
bool isEmpty() const override;
private:
T* data;
int capacity;
int nextSlot;
int firstUse;
};
树
template <class T>
class Tree
{
protected:
//--------------------------------------------------------
// inner class Node
// a single Node from a binary tree
//--------------------------------------------------------
class Node
{
public:
Node* left;
Node* right;
T value;
Node(T val)
: value(val), left(nullptr), right(nullptr) {}
Node(T val, Node* l, Node* r)
: value(val), left(l), right(r) {}
}; //end of Node class
Node* root;
public:
Tree() { root = nullptr; } // initialize tree
bool isEmpty() const;
void level() { _level(root); } ;
private:
void _level(Node* current);
template<class T>
inline void Tree<T>::_level(Node* current)
{
Queue<Node>* q = new QueueVector<Node>;
if (root == nullptr)
return;
q->enqueue(root);
while (!q->isEmpty())
{
root = q->dequeue();//I can do this only if I store node
if (root->left != nullptr)
q->enqueue(root->left);
if (root->right != nullptr)
q->enqueue(root->right);
}
}
【问题讨论】:
-
QueueVector函数的主要和实现部分在哪里?最好在这里提供一个可编译的代码。 -
@prehistoricpenguin 主要不做任何导致问题的事情。我唯一想要的是我可以使用模板在我的节点函数队列中创建
标签: c++ pointers templates queue