В C ++ «Node» - это класс, «node» - это экземпляр «Node». Почему «* node = nullptr» неправильный, а «* node = NULL» правильный? - PullRequest
0 голосов
/ 05 июля 2018
Node* node;    
*node = nullptr;

Сообщить об ошибке:

error: no viable overloaded '='
       *node = nullptr;

но

Node* node;    
*node = NULL;

правильно?

Ответы [ 5 ]

0 голосов
/ 05 июля 2018

Итак:

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 type может иметь что-то вроде этого:

Node& operator = (const Node &n ) { 
    if (n == NULL) {
        // do something
    }

    // do something else
    return n;
}
0 голосов
/ 05 июля 2018

NULL, скорее всего, старый макрос, унаследованный от мира C и определяемый как 0.

Итак, во втором случае присваивается число 0 переменной типа Node. Тогда как в первом случае указатель назначается (nullptr). Компилятор точно знает, что это неправильно, поскольку *node не является указателем. Что означает, что он будет жаловаться.

Будет ли он жаловаться на присвоение числового значения от 0 до Node, зависит от того, был ли перегружен оператор присваивания для Node для приема номера. Или существует ли неявное преобразование / конструктор из числа в Node.

0 голосов
/ 05 июля 2018

Вы должны использовать node = nullptr;

Вы сделали указатель и теперь должны выделить указатель, чтобы указывать на что-то, поэтому node = nullptr;

Node * nullptr; определяет тип переменной nullptr, это указатель на тип узла

0 голосов
/ 05 июля 2018

Скорее всего, Node можно построить с int. Так как null определен как постоянная типа int, равная 0, вы ошибочно вызываете конструктор узла и присваиваете его узлу.

Как сказал Сид С., node = nullptr - правильное выражение.

0 голосов
/ 05 июля 2018

Никто не прав. Вы должны использовать node = nullptr; для присвоения переменной node, в отличие от присвоения тому, на что указывает node.

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