无效的协变返回类型错误

时间:2015-04-23 08:26:15

标签: c++ inheritance tree

我在覆盖派生类中的基类函数时遇到以下错误。

./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 ++中允许,为什么会失败?

1 个答案:

答案 0 :(得分:2)

您似乎正在向前声明RBNode。当编译器看到RBTree时,它还不知道RBNode是一个Node。