簡體   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