1
所以我創建了霍夫曼樹,我很難覆蓋函數,並且我認爲它是由於協方差問題。以下是我在代碼中遇到困難的層次結構:派生類不被識別爲協變
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();
但據我所知,樹*應TreeInterface的有效協*。用TreeInterface替換Tree *會使程序編譯,但這不是我在我的實際程序中需要的。任何幫助是極大的讚賞!
哦,男人,我知道這是一個小小的,愚蠢的事情,就像那樣哈哈。謝謝你,這非常有幫助! –
@TaylorBradshaw,放心吧,這不會是你會犯的最後一個愚蠢的錯誤:) :) –