【问题标题】:Derived class not recognized as covariant派生类不被识别为协变
【发布时间】:2017-04-14 16:26:43
【问题描述】:

所以我正在创建一棵霍夫曼树,我很难覆盖一个函数,我相信这是由于协方差问题。这是我在代码中遇到困难的层次结构:

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* 可以编译程序,但这不是我在实际程序中需要的。非常感谢任何帮助!

【问题讨论】:

    标签: c++ inheritance overriding covariance


    【解决方案1】:
    class Tree : TreeInterface { ... };
    

    等价于

    class Tree : private TreeInterface { ... };
    

    你需要继承public

    class Tree : public TreeInterface { ... };
    

    【讨论】:

    • 哦,伙计,我知道这是一个像那样的小而愚蠢的事情哈哈。谢谢大佬,很有帮助!
    • @TaylorBradshaw,请放心,这不会是你犯的最后一个愚蠢的错误 :) :)
    猜你喜欢
    • 2012-09-22
    • 2017-01-19
    • 2014-04-15
    • 2011-07-31
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多