将头指针设置为NULL('NULL':未声明的标识符)

20

我在C ++中定义了一个链表。 我试图将变量头(在Movie_LinkedList构造函数中)设置为NULL值,但是我得到了以下错误:

movie.h(40):错误C2065:'NULL':未声明的标识符

请注意,我不能包含除之外的任何库

非常感谢您提供的任何帮助!


1
那是因为 NULL 没有被定义。要么定义它,要么将 head = 0 - Nick
你为什么删掉了你的代码? - CassOnMars
因为有些学生会抄我的代码。 - Alon Shmiel
2
他们仍然可以,因为它在编辑历史记录中。 - Chowlett
3
抄袭烂代码的学生们要倒霉啦!:-P - metal
5个回答

25

代码中使用的NULL在程序中未定义。通常情况下,它定义在一个标准头文件中,具体来说是<cstddef><stddef.h>。由于你只能使用iostream,如果该头文件没有隐式地包含NULL,你可以使用0或者在C++11中使用nullptr,后者是一个关键字,不需要头文件。(不建议自己定义NULL。尽管有时可能会起作用,但这在技术上是非法的。)


包含宏的头文件是不必要的。虽然我不是那个给你点踩的人。 - Aniket Inge
不允许 OP 包含头文件! - Aniket Inge
@Aniket 唯一获取 NULL 的方法是包含定义它的标准头文件之一。 - James Kanze
这绝对不是真的@JamesKanze,另一种方法已经在我的回答中发布了。 - Aniket Inge
@Aniket,你的答案是错误的。在你的代码中定义NULL是非法的(至少如果你包含任何标准头文件)。 - James Kanze

8

你应该包含<stddef.h><cstddef>

但你也可以使用 0nullptr


我认为 nullptr 只适用于 c++11。 - Nick
Op不允许包含头文件。将指针分配给整数会导致编译器错误。 - Aniket Inge
1
不会。尝试使用 int* p = 0;,这很常见。 - metal
嗯,@metal 试试这个:int *p = 0x1 - 不过编译器说可以赋值为0但不是1。 - Aniket Inge
创造者说过:http://www.stroustrup.com/C++11FAQ.html#nullptr 还要注意参考文献。 - metal
4
因为“一个恒定的整数表达式评估为0”是一个空指针常量,可以隐式地转换为任何类型的空指针。这就是为什么你认为NULL被定义为什么的原因? - James Kanze

4
使用以下包含语句:
#include <stddef.h>

他必须这样做,否则他无法使用 NULL - James Kanze

2

无需使用任何库!

在头文件的顶部,

执行以下操作:

#ifndef NULL
#define NULL (0)
#endif

@JamesKanze 现在是合法的。 - Aniket Inge
只要它在标准头文件之一中提供。您不得提供标准头文件中的定义。 - James Kanze
但是他没有包含标准头文件。而且您可以随时取消定义任何宏(即使在标准库中)。 - Aniket Inge
在这里,传统的C和C++之间没有真正的区别。自从Kernighan和Richie的时代以来,NULL一直是0。由于某种未知的原因,C标准委员会决定“允许”使用另一种形式,但它不属于K&R C,也肯定不是传统的形式。 - James Kanze
2
参见§17.6.4.3.1/1:“包含标准库头文件的翻译单元不得#define#undef在任何标准库头文件中声明的名称。” - James Kanze
显示剩余6条评论

1
"

NULL实际上不是C或C++语言的核心部分;它在stddef.h中被定义为0。

因为你正在使用C ++,所以最好使用nullptr,它是一个关键字,并且有类型。(假设它可用。它是C++11的一部分,因此并非所有编译器都支持它;实际上,你很难找到一个不支持它的编译器)

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接