Saya punya masalah dengan kontraktor struct ini ketika saya mencoba untuk mengkompilasi kode ini:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
ketika saya datang kesalahan ini terjadi:
\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 ===|
Masalah terakhir adalah struct, tetapi berfungsi dengan baik ketika berada di main.cpp saya, kali ini ada di file header dan memberi saya masalah ini. Saya menggunakan Code :: Blocks untuk mengkompilasi kode ini
<cstddef>
adalah opsi yang lebih bersih.Gunakan NULL. Itu hanya # didefinisikan sebagai 0 dan sangat berguna untuk membedakannya secara semantik dari bilangan bulat 0.
Ada masalah dengan menggunakan 0 (dan karenanya NULL). Sebagai contoh:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
Versi C ++ (C ++ 0x) berikutnya termasuk
nullptr
untuk memperbaikinya.f(nullptr); // Calls f(void*).
sumber
((void *)0)
oleh kebanyakan implementasi pustaka standar C.((void *)0)
salah di C ++, karenavoid*
tidak dapat dipaksakan untuk jenis penunjuk lain seperti di C. glibc, misalnya,#define NULL 0
saat__cplusplus
ditentukan.NULL
bukan bagian asli dari bahasa C ++ inti, tetapi merupakan bagian dari pustaka standar. Anda perlu menyertakan salah satu file header standar yang menyertakan definisinya.#include <cstddef>
atau#include <stddef.h>
harus cukup.Definisi
NULL
dijamin akan tersedia jika Anda menyertakancstddef
ataustddef.h
. Ini tidak dijamin, tetapi Anda kemungkinan besar akan mendapatkan definisinya jika Anda menyertakan banyak header standar lainnya.sumber
Apakah Anda menyertakan "stdlib.h" atau "cstdlib" dalam file ini? NULL didefinisikan di stdlib.h / cstdlib
#include <stdlib.h>
atau
#include <cstdlib> // This is preferrable for c++
sumber
Jangan gunakan
NULL
, C ++ memungkinkan Anda untuk menggunakan tanpa hiasan0
:previous = 0; next = 0;
Dan, seperti pada C ++ 11, Anda biasanya tidak boleh menggunakan salah satu
NULL
atau0
karena ini memberi Andanullptr
tipestd::nullptr_t
, yang lebih cocok untuk tugas tersebut.sumber