Я получаю следующую ошибку при переопределении функции базового класса в производном классе.ошибка недопустимого ковариантного типа возврата
./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++.
, но он дает ошибку в функции get_root(). –
@rohit: Он до сих пор не знает об этом. –
Да, большое спасибо. теперь ясно. RBTree не знает о том, что RBNode получен из узла. Следовательно, мы должны включить заголовок. –