模板结构作为函数参数

时间:2016-12-02 21:17:25

标签: c++ templates dictionary struct tree

我有我的结构词典

Play Market

我对insertAux的参数有错误,我不知道如何给这个函数一个指向Node的指针。问题是Node在一个struct中,所以编译器告诉我:

  

错误:'struct Diccionario

中没有名为'Nodo'的类型

我需要给这个函数一个Node,因为那时我将使用递归算法,我不能给函数一个Dictionary类型,因为树和字典是不同的。

1 个答案:

答案 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,我写了很多。我认为这是代码味道。

此外,您似乎正在尝试实现自己的树结构。请考虑使用标准库容器。你可能不会更好,如果你这样做,你会问不同的问题。