Tenho um problema com este construtor de estrutura quando tento compilar este código:
typedef struct Node
{
Node( int data ) //
{
this->data = data;
previous = NULL; // Compiler indicates here
next = NULL;
}
int data;
Node* previous;
Node* next;
} NODE;
quando eu venho este erro ocorre:
\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 ===|
O último problema foi a estrutura, mas funcionou bem quando estava no meu main.cpp, desta vez está em um arquivo de cabeçalho e está me causando esse problema. Estou usando Code :: Blocks para compilar este código
<cstddef>
é a opção mais limpa.Use NULL. É apenas #definido como 0 e é muito útil diferenciá-lo semanticamente do inteiro 0.
Existem problemas com o uso de 0 (e, portanto, NULL). Por exemplo:
void f(int); void f(void*); f(0); // Ambiguous. Calls f(int).
A próxima versão do C ++ (C ++ 0x) inclui
nullptr
para corrigir isso.f(nullptr); // Calls f(void*).
fonte
((void *)0)
pela maioria das implementações de biblioteca C padrão.((void *)0)
está incorreto em C ++, porquevoid*
não é coercível para outros tipos de ponteiro da mesma forma que em C. glibc, por exemplo, faz#define NULL 0
quando__cplusplus
é definido.NULL
não é uma parte nativa da linguagem C ++ principal, mas faz parte da biblioteca padrão. Você precisa incluir um dos arquivos de cabeçalho padrão que incluem sua definição.#include <cstddef>
ou#include <stddef.h>
deve ser suficiente.A definição de
NULL
estará disponível se você incluircstddef
oustddef.h
. Não é garantido, mas é muito provável que sua definição seja incluída se incluir muitos dos outros cabeçalhos padrão.fonte
Você está incluindo "stdlib.h" ou "cstdlib" neste arquivo? NULL é definido em stdlib.h / cstdlib
#include <stdlib.h>
ou
#include <cstdlib> // This is preferrable for c++
fonte
Não use
NULL
, C ++ permite que você use o sem adornos em seu0
lugar:previous = 0; next = 0;
E, como em C ++ 11, você geralmente não deve ser usando
NULL
ou0
, uma vez que fornecenullptr
do tipostd::nullptr_t
, o que é mais adequado para a tarefa.fonte