2016-01-01 3 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 самой прикладной я пишу следующее на исходном файле:класса функция, которая возвращает на структуру, которая является частным членом этого класса

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

я получаю следующие предупреждения от Eclipse:

-Член декларация не найдена

Есть идеи, которые я чувствую, как испробовали все?.

ответ

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 Может использоваться с 'auto' клиентами IIRC. –

+1

Ошибка в том, что компилятор не знает, что такое Node, если вы не примените его к классу Tree. Поэтому вы должны объявить, что возвращаете объект Node, который можно найти внутри класса Tree. – nicomp

+0

@juanchopanza Сделано. –

Смежные вопросы