【问题标题】:set head to NULL ('NULL' : undeclared identifier)将 head 设置为 NULL('NULL' :未声明的标识符)
【发布时间】:2013-03-21 14:09:49
【问题描述】:

我在 C++ 中定义了一个链表。我正在尝试为变量 head 设置一个 NULL 值(在Movie_LinkedList 的构造函数中),但我得到了:

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

请注意除了iostream

,我不能包含任何库

任何帮助表示赞赏!

【问题讨论】:

  • 那是因为NULL 尚未定义。定义它或设置head = 0
  • 你为什么要删除你的代码?
  • 因为有同学可以复制我的代码..
  • 他们仍然可以;它在编辑历史中。
  • 那些复制损坏代码的学生有祸了! :-P

标签: c++ pointers null


【解决方案1】:

正如所写,NULL 未在您的程序中定义。通常,这是在标准头文件中定义的——特别是<cstddef><stddef.h>。由于您被限制为iostream,如果您没有从该标题中隐式获取NULL,您可以使用0,或者在C++11 中,nullptr,它是一个关键字并且不需要一个标题。 (不建议自己定义NULL。有时可能会起作用,但从技术上讲是非法的。)

【讨论】:

  • 不需要包含宏的头文件。虽然我不是反对者
  • OP 不允许包含标题!
  • @Aniket 获得NULL唯一方法是包含定义它的标准标题之一。
  • 这肯定不是真的@JamesKanze 我的答案在下面发布了另一种方式
  • @Aniket 你的答案是错误的。在代码中定义 NULL 是非法的(至少在包含任何标准头文件的情况下)。
【解决方案2】:

您应该包括<stddef.h><cstddef>

不过你也可以使用0nullptr

【讨论】:

  • 我认为nullptr 仅适用于c++11
  • Op 不允许包含标题。并分配一个指向整数的指针会导致编译器错误。
  • 不,不会的。试试int* p = 0; 很常见。
  • hmm @metal 试试这个:int *p = 0x1 - 但是编译器说可以分配 0 但不能分配 1
  • @Aniket 那是因为计算为 0 的常量整数表达式 是一个空指针常量,并隐式转换为任何类型的空指针。您认为NULL 是如何定义的?
【解决方案3】:

使用以下包括:

#include <stddef.h>

【讨论】:

  • @Aniket 他必须这样做,否则他不能使用NULL
【解决方案4】:

不需要库!

在头文件的顶部,

这样做:

#ifndef NULL
#define NULL (0)
#endif

【讨论】:

  • 这是标准禁止的,会导致未定义的行为。
  • 更糟糕的是:你给出的定义甚至不合法。
  • @JamesKanze 现在是合法的
  • 问题在于(void *)0 在 C 中为 NULL 与在 C++ 中为 0 之间的区别是因为某些不兼容。
  • 参见 §17.6.4.3.1/1:“包含标准库头文件的翻译单元不得在任何标准库头文件中声明 #define#undef 名称。”
【解决方案5】:

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

由于您使用的是 C++,因此更喜欢 nullptr,这是一个关键字,并且是键入的。 (假设它可用。它是 C++11 的一部分,所以从技术上讲,并非所有编译器都支持它;实际上,你很难找到不支持它的编译器)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多