我有我的结构字典
template<typename T, typename U>
struct Diccionary {
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;
};
我对 insertAux 的参数有错误,我不知道如何给这个函数一个指向节点的指针。问题是节点在一个结构中,所以编译器告诉我:
error: no type named ‘Nodo’ in ‘struct Diccionario
我需要给这个函数一个节点,因为那样我将使用递归算法,我不能给函数一个字典类型,因为树和字典是不同的。
最佳答案
错误消息会告诉您哪里出了问题。在你使用它的地方,Diccionary<T,U>::Nodo
尚未定义。
方案一:先定义。
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;
};
方案二:既然你把它当作指针使用,那么之前声明一下就可以了。
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
尽可能少。我还没有写过一个需要 friend
的 C++ 程序在我的代码中的任何地方,我已经写了很多。我认为这是一种代码味道。
此外,这看起来像是您正在尝试实现您自己的树结构。请考虑使用标准库容器。您可能不会做得更好,如果您做得更好,您会提出不同的问题。
关于c++ - 作为函数参数的模板结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940966/