2016-01-01 113 views
2
class Tree { 
    struct Node { 
     int data; 
     Node *left,*right; 
     Node(int v, Node *n = NULL):data(v),left(n),right(n) {} 
    }; 
    Node *root; 
    int size; 
public : 
    Tree(); 
    ~Tree(); 
    struct Node* GetRoot(); 

這就是我的.h file.When我寫的私有成員在源文件中的以下內容:類函數返回一個結構屬於該類別

struct Node* Tree::GetRoot() { 
     return root; 
} 

,我得到以下警告從月蝕:

-Member聲明未發現

任何想法,我覺得自己是個什麼都試過了?

回答

5

在你的定義,你需要指定專用結構的範圍:

struct Tree::Node* Tree::GetRoot() { 
    // ^^^^^^ 
    return root; 
} 

正如其他人在評論中指出,這是值得注意的是,客戶端調用這個函數不能直接訪問Tree::Node類型,但只使用auto關鍵字:

Tree t; 
auto root = t.GetRoot(); 

// pass the obtained value back 
t.DoSomethingWithRoot(root); 
+0

@juanchopanza客戶端IIRC可以使用'auto'。 –

+1

要編譯,錯誤是因爲編譯器不知道什麼節點,除非您將其範圍限制在Tree類中。所以你必須聲明你正在返回一個可以在Tree類中找到的節點。 – nicomp

+0

@juanchopanza完成。 –