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를 사용하고 있습니다.
NULL
C 또는 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
을 포함하면 의 정의를 사용할 수 있습니다 . 보장되지는 않지만 대신 다른 표준 헤더를 많이 포함하면 정의가 포함될 가능성이 큽니다.cstddef
stddef.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
'Programing' 카테고리의 다른 글
요소의 하단 및 오른쪽 위치 가져 오기 (0) | 2020.10.17 |
---|---|
C #에서 알 수없는 길이의 배열 (0) | 2020.10.16 |
가변 개수의 인수를 printf / sprintf에 전달하는 방법 (0) | 2020.10.16 |
MySQL에서 주별로 그룹화하는 방법은 무엇입니까? (0) | 2020.10.16 |
작업 중 하나에 대한 레이아웃 끄기 (0) | 2020.10.16 |