dostaję ten komunikat podczas kompilowania C++ na gcc 4.3błąd: „NULL” nie został zadeklarowany w tym zakresie
error: ‘NULL’ was not declared in this scope
To pojawia się i znika i nie wiem dlaczego. Czemu?
Dzięki.
dostaję ten komunikat podczas kompilowania C++ na gcc 4.3błąd: „NULL” nie został zadeklarowany w tym zakresie
error: ‘NULL’ was not declared in this scope
To pojawia się i znika i nie wiem dlaczego. Czemu?
Dzięki.
NULL
nie jest słowem kluczowym. Jest to identyfikator zdefiniowany w niektórych standardowych nagłówkach. Możesz dołączyć
#include <cstddef>
mieć go w zasięgu, w tym niektórych innych podstaw, jak std::size_t
.
Boże, jestem tak rozpieszczona Javą (null jest słowem kluczowym), że nigdy nie myślałem, że NULL nie będzie słowem kluczowym w C++. Dzięki :) –
Właściwie to nie jest też słowo kluczowe w Javie. –
@ManofOneWay Nie, istnieje w Javie, jest po prostu pisane wielkimi literami zamiast wielkich liter. – Ataraxia
NULL
nie jest słowem kluczowym; jest to podstawienie makra dla 0, i jest w stddef.h
lub cstddef
, jak sądzę. Nie masz odpowiedniego pliku nagłówkowego, więc g ++ widzi NULL
jako zwykłą nazwę zmiennej i nie zadeklarowałeś tego.
GCC jest podjęcie kroków w kierunku C++ 11, który pewnie dlatego teraz trzeba to cstddef w celu wykorzystania NULL stała. Preferowanym sposobem w C++ 11 jest użycie nowego słowa kluczowego "nullptr ", które jest implementowane w GCC od wersji 4.6. nullptr nie jest niejawnie zamienny do integralnych typów, dzięki czemu może być używany do dwuznaczności wywołanie funkcji, która została przeciążona zarówno wskaźnik i integralnych typach:
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
Ale nadal To dziwne zachowanie! Nawet kompilowanie mojego kodu za pomocą -std = C++ 98 obrazów GCC nie rozpoznaje makr NULL i rozpoznaje tylko nullptr z C++ 11 lub gnu ++ 11 jako argumentem dla -std. – pharaoh
Standard C++ stwierdził już w 1998 r., Że NULL jest zdefiniowany w cstddef - nowe wersje kompilatorów po prostu stosują się do normy w bardziej ścisły sposób, ponieważ muszą implementować nullptr.Twój (wadliwy) kod został skompilowany z wcześniejszymi wersjami GCC, ale trudno byłoby zachować zgodność wsteczną z wcześniejszymi wersjami GCC, oprócz wcześniejszych standardowych wersji C++. –
'NULL' nigdy nie było wbudowanym słowem kluczowym; jest to makro zdefiniowane w kilku standardowych nagłówkach C, w tym '
aby dokończyć inne odpowiedzi: Jeśli jesteś używając C++ 11, użyj nullptr
, co jest słowem kluczowym, które oznacza pustą wskazówkę wskazującą na wartość null. (zamiast NULL
, który nie jest typem wskaźnika)
Możesz zadeklarować makro NULL. Dodać, że po wyrazami dyrektywami #INCLUDE:
#define NULL 0
lub
#ifndef NULL
#define NULL 0
#endif
No ";" na i instrukcje.
Być może nie zadeklarowałeś NULL w zakresie, skąd wiadomość pochodzi? –
Powinieneś co najmniej napisać kompletny fragment kodu, który podaje błąd. W przeciwnym razie bardzo trudno będzie określić, co się dzieje, patrząc na ciąg znaków błędu. – Naveen