2015-04-23 2 views
0

Я получаю следующую ошибку при переопределении функции базового класса в производном классе.ошибка недопустимого ковариантного типа возврата

./inc/rbtree.h:16:18: error: invalid covariant return type for ‘virtual RBNode* RBTree::get_root()’ 
./inc/tree.h:25:24: error: overriding ‘virtual Node* Tree::get_root()’ 

rbtree.h

class RBNode; 

class RBTree: public Tree 
{ 
    protected: 
    public: 
     RBTree(); 
     RBNode *root; 
     RBNode * get_root(); 
     void insert_into_tree(); 
     //void delete_from_tree(); 
}; 

и tree.h как ниже

class Node; 

class Tree 
{ 
    protected: 
     Node * root; 
     list<int> treedata; 
    public: 
     Tree(); 
     /* This is where it gives error */ 
     virtual Node * get_root(); 
     void set_root(Node *root_node); 
     void insert_into_tree(); 
     void delete_from_tree(); 
     void print_tree(); 
}; 

Дополнительная информация: RBNode выводится из узла. Теперь я прочитал это article, и он прекрасно говорит, чтобы переопределить функцию базового класса, чтобы вернуть Derived тип instace.

Я тоже искал на SO, но вопросы, касающиеся этого, не помогли. Почему не удается, если это разрешено на C++.

ответ

2

Похоже, что вы указываете RBNode наперед. Когда компилятор видит RBTree, он еще не знает, что RBNode является узлом.

+0

, но он дает ошибку в функции get_root(). –

+0

@rohit: Он до сих пор не знает об этом. –

+0

Да, большое спасибо. теперь ясно. RBTree не знает о том, что RBNode получен из узла. Следовательно, мы должны включить заголовок. –

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