Programing

NULL이 선언되지 않은 이유는 무엇입니까?

lottogame 2020. 10. 16. 07:03
반응형

NULL이 선언되지 않은 이유는 무엇입니까?


이 코드를 컴파일하려고 할 때이 구조체 생성자에 문제가 있습니다.

typedef struct Node
{
    Node( int data ) //
    {
        this->data = data;
        previous = NULL; // Compiler indicates here
        next = NULL;
    }

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

내가 올 때이 오류가 발생합니다.

\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 :: Blocks를 사용하고 있습니다.


NULLC 또는 C ++ 언어의 내장 상수가 아닙니다. 사실, C ++에서는 다소 쓸모가 없습니다. 0대신 일반 리터럴을 사용하면 컴파일러가 컨텍스트에 따라 올바른 작업을 수행합니다.

최신 C ++ (C ++ 11 이상)에서는 nullptr(주석에서 지적한대로) 사용하십시오.

그렇지 않으면 추가

#include <stddef.h>

NULL정의 를 얻으려면 .


NULL을 사용하십시오. 어쨌든 0으로 정의되고 의미 론적으로 정수 0과 구별하는 것이 매우 유용합니다.

0 (따라서 NULL)을 사용하는 데 문제가 있습니다. 예를 들면 :

void f(int);
void f(void*);

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

다음 버전의 C ++ (C ++ 0x)에는 nullptr이 문제를 해결하기 위해 포함 됩니다.

f(nullptr); // Calls f(void*).

NULL핵심 C ++ 언어의 기본 부분은 아니지만 표준 라이브러리의 일부입니다. 정의를 포함하는 표준 헤더 파일 중 하나를 포함해야합니다. #include <cstddef>또는 #include <stddef.h>충분해야합니다.

또는 NULL을 포함하면 의 정의를 사용할 수 있습니다 . 보장되지는 않지만 대신 다른 표준 헤더를 많이 포함하면 정의가 포함될 가능성이 큽니다.cstddefstddef.h


이 파일에 "stdlib.h"또는 "cstdlib"를 포함하고 있습니까? NULL은 stdlib.h / cstdlib에 정의되어 있습니다.

#include <stdlib.h>

또는

#include <cstdlib>  // This is preferrable for c++

사용하지 마십시오 NULL. C ++를 사용하면 장식 0되지 않은 것을 대신 사용할 수 있습니다 .

previous = 0;
next = 0;

그리고, C ++ 11에서, 당신은 일반적으로 하나 사용하지 않아야 NULL 또는 0 그것이 당신을 제공하기 때문에 nullptr유형의 std::nullptr_t더 나은 작업에 적합합니다.

참고 URL : https://stackoverflow.com/questions/924664/why-is-null-undeclared

반응형