首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么NULL未声明?

为什么NULL未声明?
EN

Stack Overflow用户
提问于 2009-05-29 06:30:20
回答 4查看 210.4K关注 0票数 96

当我尝试编译这段代码时,我遇到了这个结构构造器的问题:

代码语言:javascript
复制
typedef struct Node
{
    Node( int data ) //
    {
        this->data = data;
        previous = NULL; // Compiler indicates here
        next = NULL;
    }

    int data;
    Node* previous;
    Node* next;
} NODE;

当我来的时候,这个错误发生了:

代码语言:javascript
复制
\linkedlist\linkedlist.h||In constructor `Node::Node(int)':|
\linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope|
    ||=== Build finished: 1 errors, 0 warnings ===|

最后一个问题是结构,但当它在我的main.cpp中时,它工作得很好,这一次它在一个头文件中,给我带来了这个问题。我正在使用code::块来编译这段代码

EN

回答 4

Stack Overflow用户

发布于 2009-05-29 06:34:21

在C或C++语言中,NULL不是内置常量。事实上,在C++中,它或多或少已经过时了,只需使用简单的文字0,编译器将根据上下文执行正确的操作。

在较新的C++ (C++11和更高版本)中,使用nullptr (在评论中指出,谢谢)。

否则,添加

#include <stddef.h>

来获取NULL定义。

票数 151
EN

Stack Overflow用户

发布于 2009-05-29 12:52:31

请务必使用NULL。它只是#定义为0,从语义上区分它与整数0是非常有用的。

使用0会出现问题(因此会出现NULL)。例如:

代码语言:javascript
复制
void f(int);
void f(void*);

f(0); // Ambiguous. Calls f(int).

下一个版本的C++ (C++0x)包括nullptr来解决这个问题。

代码语言:javascript
复制
f(nullptr); // Calls f(void*).
票数 40
EN

Stack Overflow用户

发布于 2009-05-29 06:34:55

NULL不是核心C++语言的原生部分,但它是标准库的一部分。您需要包含一个包含其定义的标准头文件。#include <cstddef>#include <stddef.h>应该就足够了。

如果包含cstddefstddef.h,则可以保证NULL的定义可用。这是不能保证的,但是如果你包含了许多其他的标准头部,你很可能会得到它的定义。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/924664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档