Otrzymuję ten komunikat podczas kompilacji C ++ na gcc 4.3
error: ‘NULL’ was not declared in this scope
Pojawia się i znika i nie wiem dlaczego. Czemu?
Dzięki.
Otrzymuję ten komunikat podczas kompilacji C ++ na gcc 4.3
error: ‘NULL’ was not declared in this scope
Pojawia się i znika i nie wiem dlaczego. Czemu?
Dzięki.
Odpowiedzi:
NULLnie jest słowem kluczowym. Jest to identyfikator zdefiniowany w niektórych standardowych nagłówkach. Możesz dołączyć
#include <cstddef>
Aby mieć to w zakresie, w tym kilka innych podstaw, takich jak std::size_t.
nullptrsłowie kluczowym, które jest rzeczywistym słowem kluczowym i nie wymaga żadnego #includes. Jest również bardziej bezpieczny niż NULL.
GCC podejmuje kroki w kierunku C ++ 11, dlatego prawdopodobnie musisz teraz dołączyć cstddef , aby użyć stałej NULL . Preferowanym sposobem w C ++ 11 jest użycie nowego słowa kluczowego nullptr , które zostało zaimplementowane w GCC od wersji 4.6. nullptr nie jest niejawnie konwertowany na typy całkowite, więc może służyć do ujednoznaczniania wywołania funkcji, która została przeciążona zarówno dla typów wskaźnikowych, jak i całkowitych:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULLnigdy nie było wbudowanym słowem kluczowym; jest to makro zdefiniowane w kilku standardowych nagłówkach C, w tym <stddef.h>(lub <cstddef>). Jak gcc „podjęcie kroków w kierunku C ++ 11” wpływa na to? Nie widzę w pytaniu nic, co sugerowałoby, że (niewidoczny) kod skompilowany z wcześniejszymi wersjami gcc / g ++ lub z wcześniejszymi wersjami standardu językowego.
NULLnie jest słowem kluczowym; jest to podstawienie makra dla 0 i wydaje mi się, że pojawia się stddef.hlub cstddef. Nie masz #includedodpowiedniego pliku nagłówkowego, więc g ++ widzi NULLzwykłą nazwę zmiennej, a jej nie zadeklarowałeś.
Aby uzupełnić pozostałe odpowiedzi: Jeśli używasz C ++ 11, użyj nullptrsłowa kluczowego oznaczającego void wskaźnik wskazujący na null. (zamiast NULL, który nie jest typem wskaźnikowym)