我有我的结构词典
Play Market
我对insertAux的参数有错误,我不知道如何给这个函数一个指向Node的指针。问题是Node在一个struct中,所以编译器告诉我:
错误:'struct Diccionario
中没有名为'Nodo'的类型
我需要给这个函数一个Node,因为那时我将使用递归算法,我不能给函数一个Dictionary类型,因为树和字典是不同的。
答案 0 :(得分:1)
错误消息告诉您,出了什么问题。在您使用它的地方,Diccionary<T,U>::Nodo
尚未定义。
解决方案1:之前定义它。
template<typename T, typename U>
struct Diccionary {
private:
struct Nodo{
T t;
U u;
Nodo* left;
Nodo* right;
};
public:
friend void insert<T, U>(Diccionario<T,U>& d, const T& c, const U& v);
friend void insertAux<T, U>(typename Diccionary<T,U>::Nodo* a, const T& c, const U& v);
private:
Nodo* root;
Nodo* iterator;
int size;
};
解决方案2:因为你将它用作指针,所以在之前声明它就足够了。
template<typename T, typename U>
struct Diccionary {
private:
struct Nodo;
public:
friend void insert<T, U>(Diccionario<T,U>& d, const T& c, const U& v);
friend void insertAux<T, U>(typename Diccionary<T,U>::Nodo* a, const T& c, const U& v);
private:
struct Nodo{
T t;
U u;
Nodo* left;
Nodo* right;
};
Nodo* root;
Nodo* iterator;
int size;
};
作为一般说明:尽可能少地使用friend
。我还没有编写一个单独的C ++程序,在我的代码中需要friend
,我写了很多。我认为这是代码味道。
此外,您似乎正在尝试实现自己的树结构。请考虑使用标准库容器。你可能不会更好,如果你这样做,你会问不同的问题。