C++ 对象的类型限定符不兼容,可能是继承/多态错误? 类节点 { 受保护的: 整数十进制_值; 字符字母; 公众: 节点(int-decimal,char-lett):十进制值(decimal),字母(lett) {} 节点():十进制值(0),字母(NULL) {} int get_decimal() { 返回十进制值; } char get_字母() { 回信; } 无效集\十进制(整数n) { 十进制_值=n; } 无效集合字母(字符l) { 字母=l; } friend bool运算符p2.decimal_值; } 虚拟~Node(){}; }; 类叶:公共节点 { 使用Node::Node; }; 类分支:公共节点 { 节点*左; 节点*右; 公众: 分支(节点*l,节点*r):左(l),右(r) { 十进制值=l->get_decimal()+r->get_decimal(); } }; 无效树生成器(优先级队列Q) { Node*qleft=新叶; Node*qright=新叶; 而(Q.size()>1) { *qleft=Q.top(); Q.pop(); *qright=Q.top(); Q.pop(); 分支*b1=新分支(qleft,qright); Q.push(*b1); cout

C++ 对象的类型限定符不兼容,可能是继承/多态错误? 类节点 { 受保护的: 整数十进制_值; 字符字母; 公众: 节点(int-decimal,char-lett):十进制值(decimal),字母(lett) {} 节点():十进制值(0),字母(NULL) {} int get_decimal() { 返回十进制值; } char get_字母() { 回信; } 无效集\十进制(整数n) { 十进制_值=n; } 无效集合字母(字符l) { 字母=l; } friend bool运算符p2.decimal_值; } 虚拟~Node(){}; }; 类叶:公共节点 { 使用Node::Node; }; 类分支:公共节点 { 节点*左; 节点*右; 公众: 分支(节点*l,节点*r):左(l),右(r) { 十进制值=l->get_decimal()+r->get_decimal(); } }; 无效树生成器(优先级队列Q) { Node*qleft=新叶; Node*qright=新叶; 而(Q.size()>1) { *qleft=Q.top(); Q.pop(); *qright=Q.top(); Q.pop(); 分支*b1=新分支(qleft,qright); Q.push(*b1); cout,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,priority\u queue::top()返回对const对象(const&)的引用,但get\u decimal()未使用const限定符声明,因此无法对const对象调用它。您需要添加const限定符: class Node { protected: int decimal_value; char letter; public: Node(int decimal, char lett) : decimal_value(decimal), letter(lett)

priority\u queue::top()
返回对
const
对象(
const&
)的引用,但
get\u decimal()
未使用
const
限定符声明,因此无法对
const
对象调用它。您需要添加
const
限定符:

class Node
{
protected:
    int decimal_value;
    char letter;
public:
    Node(int decimal, char lett) : decimal_value(decimal), letter(lett)
    {}
    Node() :decimal_value(0), letter(NULL)
    {}
     int get_decimal()
    {
        return decimal_value;
    }
    char get_letter()
    {
        return letter;
    }
    void set_decimal(int n)
    {
        decimal_value = n;
    }
    void set_letter(char l)
    {
        letter = l;
    }
    friend bool operator<( Node& p1, Node& p2)
    {
        return p1.decimal_value > p2.decimal_value;
    }
    virtual ~Node() {};
};
class Leaf :public Node
{
    using Node::Node;

};
class Branch :public Node
{

    Node* left;
    Node* right;
public:

    Branch(Node* l, Node* r) :left(l), right(r)
    {
        decimal_value = l->get_decimal() + r->get_decimal();

    }

};
void tree_builder(priority_queue<Node> Q)
{
    Node* qleft=new Leaf;
    Node* qright= new Leaf;
    while (Q.size() > 1)
    {
        *qleft = Q.top();
        Q.pop();
        *qright = Q.top();
        Q.pop();
        Branch* b1 = new Branch(qleft, qright);
        Q.push(*b1);

        cout << Q.top().get_decimal();
    }




}

您还应该更改
运算符。在旁注中,
树生成器()
应该通过引用而不是通过值获取
优先级队列。并且它正在泄漏它
新建的
对象和
Q.push(*b1)
。由于您试图在队列中存储多态类,因此需要在队列中使用
节点*
指针,而不是
节点
对象。
int get_decimal() const // <-- HERE
{
    return decimal_value;
}
char get_letter() const
{
    return letter;
}
friend bool operator<(const Node& p1, const Node& p2)
{
    return p1.decimal_value > p2.decimal_value;
}