НЕТ соответствующей функции для вызова » std::очередь::push(NULL)»

#oop #c 11

Вопрос:

Я решаю проблему и наткнулся на это препятствие . Почему этот код выдает мне ошибку

 queue<node>q;
node n;
q.push(n);
q.push(NULL);
 

«нет соответствующей функции для вызова» std::очередь::push(NULL)»

И когда я сделаю это, изменится

 queue<node*>q;
node* n = new node();
q.push(n);
q.push(NULL);
 

Это Прекрасно работает!

Комментарии:

1. Ваша очередь содержит node s, но вы пытаетесь нажать NULL , которое не является одним из них.

2. Вы могли бы использовать q.push({}) то, что может работать как с std::queue<node> , так и с std::queue<node *> . В первом случае он будет толкать созданный по умолчанию node указатель, во втором случае он будет толкать созданный по умолчанию указатель на a node , что будет то же самое , что и нажатие nulltpr (не используйте NULL , это вещь C).

3. Ваш node не инициализируется нулем , вы получите ту же ошибку для node n = NULL;