2016-01-01 119 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完成。 –