Node* node;
*node = nullptr;
报告错误:
error: no viable overloaded '='
*node = nullptr;
但是
Node* node;
*node = NULL;
是正确的吗?
答案 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的指针