Требуется преобразование из нескалярного типа «узел *» в скалярный тип «узел»

0

Эта строка имеет ошибку. Я попробовал много разных изменений, чтобы попытаться исправить, но я не могу понять, что это правильно. Я реализую очередь (используя список), и эта конкретная строка является частью операции enqueue (int item).

node obj = new node (item, <node * pointer>);

Конструктор:

node(int new_data, node * next_node ){
          data = new_data ;
          next = next_node ;
}

Я пробовал эту строку:

node * ptr = NULL;
node obj = new node (item, ptr);

Но это все равно дает ту же ошибку. Поскольку этот узел будет последним узлом в очереди, он не должен указывать ни на что (возможно, я приближаюсь к этому неправильно !?). Установка указателя на NULL работает в разделах до этого кода. Отличным началом было бы объяснить, что на самом деле означает сообщение об ошибке, т.е. Я передаю "узел", и он ожидает "узла" или наоборот? Возможно, мне не хватает информации о указателях или материалах, связанных с кучей. Спасибо заранее за любую помощь.

  • 1
    Basic - домашнее задание - Вы хотели установить аттрактор понижающего голоса?
  • 0
    И, пожалуйста, будьте внимательны к полученным ошибкам! Если вы не получаете их на английском языке, просто используйте плохой перевод из Google или тому подобное (еще лучше воспроизвести с помощью ideone или аналогичного).
Показать ещё 3 комментария
Теги:
pointers

1 ответ

3

new -expression возвращает указатель на выделенный объект. Поэтому вам нужно:

node* obj = new node(item, ptr);

Это должно быть достаточно очевидным из сообщения об ошибке. Он говорит, что вы не можете конвертировать из node* в node, поскольку вы объявили obj как node. Это не относится к аргументам, которые вы передаете.

Конечно, вы просто не можете использовать new вообще:

node obj(item, ptr);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню