Возможная ошибка указателя не может преобразовать из типа 1 в тип 2 - PullRequest
0 голосов
/ 24 октября 2019
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() const
    {
        return decimal_value;
    }

    char get_letter() const
    {
        return letter;
    }

    void set_decimal(int n)
    {
        decimal_value = n;
    }

    void set_letter(char l)
    {
        letter = l;
    }

    friend bool operator<( const Node& p1,  const 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();
        Node* b1 = new Branch(qleft, qright);
        Q.push(b1);

        cout << Q.top()->get_decimal();
        tree_builder(Q);
    }

}
int main()
{
    bitset<8> A (string("1001"));
    Node* n1= new Leaf (A.to_ulong(), 'A');
    priority_queue<Node*> my_q;
    my_q.push(n1);
    tree_builder(my_q);

}


}

В самой последней строке main, когда я пытаюсь выполнить построитель деревьев на my_q. Я получаю сообщение об ошибке "не могу преобразовать аргумент 1 из узла piriority_queue * в узел Priority_queue, однако я не понимаю, что такое узел, поскольку все является узлом * Я упростил свой код, включив в него только 1 объект Node * для более удобного просмотра.

1 Ответ

0 голосов
/ 24 октября 2019

В вашем сообщении об ошибке указывается, что аргумент функции tree_builder является ссылкой на priority_queue<Node> вместо priority_queue<Node*>, который показывает ваш код.

Сказал, что я могу скомпилировать ваш код просто отличнос лязгом, учитывая право включает в себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...