2017-04-14 5 views
1

Also erstelle ich einen Huffman-Baum, und es fällt mir schwer, eine Funktion außer Kraft zu setzen, und ich glaube, dass dies auf ein Kovarianzproblem zurückzuführen ist. Hier ist die Hierarchie, die ich eine harte Zeit habe mit in meinem Code:Abgeleitete Klasse nicht als Kovariante erkannt

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; 
}; 

Die Arbeit ganz gut, aber es ist der nächste Block, die Probleme hat.

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(){ } 

Das Problem ist also offenbar in der getTree() Funktion, wird folgende Fehler

invalid covariant return type for ‘virtual Tree* Huffman::getTree()’: 
Tree * getTree(); 

geben, aber soweit ich weiß, Baum * sollte eine gültige covariant von TreeInterface * sein. Ersetzen von Tree * mit TreeInterface * macht das Programm kompilieren, aber es ist nicht das, was ich in meinem eigentlichen Programm brauche. Jede Hilfe wird sehr geschätzt!

Antwort

3
class Tree : TreeInterface { ... }; 

entspricht

class Tree : private TreeInterface { ... }; 

Sie benötigen public das Erbe zu machen.

class Tree : public TreeInterface { ... }; 
+0

Oh man, ich wusste, es war eine kleine, dumme Sache wie so haha. Danke Mann, das war sehr hilfreich! –

+2

@ TaylorBradshaw, seien Sie versichert, dass das nicht der letzte dumme Fehler sein wird, den Sie machen werden :) :) –

Verwandte Themen