在C ++中,“节点”是一个类,“节点”是“节点”的实例。为什么“ * node = nullptr”是错误的,但是“ * node = NULL”是正确的?

时间:2018-07-05 04:14:20

标签: c++ c++11

Node* node;    
*node = nullptr;

报告错误:

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

但是

Node* node;    
*node = NULL;

是正确的吗?

5 个答案:

答案 0 :(得分:6)

最可能使用Node来构造int。由于null被定义为等于0的int常量,因此您错误地调用了节点构造函数并将其分配给节点。

正如Sid S所说,node = nullptr是正确的表达方式。

答案 1 :(得分:6)

NULL很可能是一个旧的宏,它是从C语言世界继承而来的,并且定义为0。

因此,第二种情况是将数字 0分配给类型Node的变量。在第一种情况下,分配了指针nullptr)。 编译器肯定知道这是错误的,因为*node不是指针。这意味着它将抱怨。

是否会向Node分配数字0,将取决于Node的赋值运算符是否已重载以接受数字。或者是否存在从数字到Node的隐式转换/构造函数。

答案 2 :(得分:4)

都不正确。您应该使用node = nullptr;来分配给node变量,而不是分配给node所指向的变量。

答案 3 :(得分:2)

所以:

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;
}

答案 4 :(得分:1)

您应该使用node = nullptr;

您已经制作了一个指针,现在必须分配该指针以指向某个对象,因此,node = nullptr;

节点* nullptr;定义变量nullptr的类型为,它是指向类型node的指针