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 * для более удобного просмотра.