Node* node;
*node = nullptr;
Сообщить об ошибке :
error: no viable overloaded '='
*node = nullptr;
но
Node* node;
*node = NULL;
верно ?
Смотрите ответ на этот вопрос: stackoverflow.com/questions/1282295/what-exactly-is-nullptr
«node является экземпляром Node» По какой-то причине ни один из ответов, кажется, не говорит вам ясно, что это неверно. node - это указатель к Node.





Ни один из них не верен. Вы должны использовать node = nullptr; для назначения переменной node, а не для назначения того, на что указывает node.
Вы должны использовать node = nullptr;
Вы создали указатель и теперь должны выделить указатель, чтобы указывать на что-то, поэтому node = nullptr;
Узел * nullptr; определяет тип переменной nullptr, это указатель на тип node
Скорее всего, Node можно сконструировать с int. Поскольку null определяется как константа int, равная 0, вы ошибочно вызываете конструктор узла и назначаете его узлу.
Как сказал Сид С., node = nullptr - правильное выражение.
s/constructed/assigned/NULL, скорее всего, старый макрос, унаследованный от мира C и определяемый как 0.
Во втором случае номер 0 присваивается переменной типа Node. Тогда как в первом случае назначается указатель (nullptr).
Компилятор точно знает, что это неправильно, поскольку *node не является указателем. Значит, он будет жаловаться.
Будет ли он жаловаться на присвоение числового 0 для Node, будет зависеть от того, был ли оператор присваивания для Node перегружен для приема числа. Или есть ли неявное преобразование / конструктор из числа в Node.
Так:
Node* node;
*node = nullptr;
не может быть выполнено, потому что вы пытаетесь назначить указатель на тип Node, вам следует сделать следующее:
Node* node;
node = nullptr;
Вы должны понимать, что когда вы объявляете указатель, вы используете следующий синтаксис:
int *n = 5;
n = nullptr;
где следующее
int *n = 5;
*n = 3;
*n - это указатель отмены ссылки, переходящий по адресу, на который указывает n. То же самое и в вашем примере Node. Между тем, *node = NULL может зависеть от реализации. Итак, тип Node может иметь что-то вроде этого:
Node& operator = (const Node &n ) {
if (n == NULL) {
// do something
}
// do something else
return n;
}
Другое - это не одно и то же. - Фред Пикер.