我在覆盖派生类中的基类函数时遇到以下错误。
./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源自Node。 现在,我读了这个https://msdn.microsoft.com/en-us/library/ms757015%28v=vs.85%29.aspx,它说完全可以覆盖基类函数来返回派生类型实例。
我也搜索了SO,但有关这方面的问题没有多大帮助。如果在C ++中允许,为什么会失败?
答案 0 :(得分:2)
您似乎正在向前声明RBNode。当编译器看到RBTree时,它还不知道RBNode是一个Node。