因此,我正在创建霍夫曼树,并且很难覆盖函数,并且我认为这是由于协方差问题造成的。这是我在代码中遇到困难的层次结构:

class TreeInterface {
public:

    TreeInterface() {}
    virtual ~TreeInterface() {}

    virtual NodeInterface * getRootNode() const = 0;
};

class Tree : TreeInterface
{
public:
    Tree()
    {}
    virtual ~Tree()
    {}

    Node* getRootNode()
    {
        return treeRoot;
    }

    private:
    Node* treeRoot;
};

那些工作正常,但是下一个有问题的块。
class HuffmanInterface{
public:
    HuffmanInterface() {}
    virtual ~HuffmanInterface() {}

    virtual bool createTree(string filename) = 0;

    virtual string encodeMessage(string toEncode) = 0;

    virtual TreeInterface * getTree() = 0;

    virtual map<char, string> getEncodings() = 0;
};
class Huffman : HuffmanInterface{
public:

    Huffman() {}
    ~Huffman() {}

bool Huffman::createTree(string filename){ }

string Huffman::encodeMessage(string toEncode){ }

string Huffman::decodeMessage(string toDecode){ }

Tree* Huffman::getTree(){ }

map<char, string> Huffman::getEncodings(){ }

因此,问题显然出在getTree()函数中,给出以下错误
invalid covariant return type for ‘virtual Tree* Huffman::getTree()’:
Tree * getTree();

但据我所知,Tree *应该是TreeInterface *的有效协变量。用TreeInterface *替换Tree *可以编译程序,但这并不是我实际程序中需要的。任何帮助是极大的赞赏!

最佳答案

class Tree : TreeInterface { ... };

相当于
class Tree : private TreeInterface { ... };

您需要将继承设置为public
class Tree : public TreeInterface { ... };

09-06 11:29