我正在尝试基于二叉树搜索实现 Set 。所以我从 root (指向Node的指针)开始构建这个集合,其中Node有一个值,右边和左边的子节点(也指向Node的指针)。所以这样我可以通过将root->指向创建的节点来设置根节点右侧的新节点,依此类推。看看定义:
template <class T>
class Set
{
public:
Set();
~Set();
void push(const T&);
bool belongs(const T&) const;
void remove(const T&);
const T& min() const;
const T& max() const;
unsigned int cardinal() const;
void show(std::ostream&) const;
friend ostream& operator<<(ostream& os, const Set<T> &c) {
c.show(os);
return os;
}
private:
struct Node
{
Node(const T& v);
T value;
Node* left;
Node* right;
};
Node* root_;
int cardinal_;
Node & fatherOfNode(const Node & root, const T & key, const bool hook) const;
};
...
// This function is the one with errors.
template <class T>
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const {
// Some code
}
所以我有这个错误:
/home/jscherman/ClionProjects/algo2-t3-bts/set.hpp:247:1: error: ‘Node’ does not name a type
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const {
^
我见过很多与此错误相关的帖子,但其中大多数都是在定义之前编写函数实现引起的。如您所见, fatherOfNode 的实现低于其定义,因此它似乎不是我的情况。
关于发生了什么的任何想法?
答案 0 :(得分:4)
Node
是Set
中的内部类,所以在此课程之外,您需要解决此问题:
Set<T>::Node
所以你的函数定义需要是:
template <class T>
typename Set<T>::Node & Set<T>::fatherOfNode(const Set<T>::Node & root, const T & key, const bool hook) const {