派生 class 未被识别为协变
Derived class not recognized as covariant
所以我正在创建一个哈夫曼树,我很难覆盖一个函数,我认为这是由于协方差问题。这是我在代码中遇到困难的层次结构:
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 { ... };
所以我正在创建一个哈夫曼树,我很难覆盖一个函数,我认为这是由于协方差问题。这是我在代码中遇到困难的层次结构:
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 { ... };