繁体   English   中英

模板结构作为函数参数

[英]A template struct as a function argument

我有我的结构字典

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参数有错误,我不知道如何为该函数提供指向Node的指针。 问题是Node在结构中,所以编译器告诉我:

错误:“ struct Diccionario”中没有名为“ Nodo”的类型

我需要为该函数提供一个Node,因为随后我将使用递归算法,并且由于树和字典不同,因此无法为该字典提供Dictionary类型。

错误消息会告诉您,这是什么问题。 在使用它的地方,尚未定义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 ,而且我已经写了很多。 我认为这是一种代码气味。

而且看起来您正在尝试实现自己的树结构。 请考虑使用标准库容器。 您可能不会变得更好,如果做得更好,您会提出其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM