派生类不被识别为协变
Posted
技术标签:
【中文标题】派生类不被识别为协变【英文标题】: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* 可以编译程序,但这不是我在实际程序中需要的。非常感谢任何帮助!
【问题讨论】:
【参考方案1】:class Tree : TreeInterface ... ;
等价于
class Tree : private TreeInterface ... ;
你需要继承public
。
class Tree : public TreeInterface ... ;
【讨论】:
哦,伙计,我知道这是一个像那样的小而愚蠢的事情哈哈。谢谢大佬,很有帮助! @TaylorBradshaw,请放心,这不会是你犯的最后一个愚蠢的错误 :) :)以上是关于派生类不被识别为协变的主要内容,如果未能解决你的问题,请参考以下文章