error: ‘NULL’ was not declared in this scope

后端 未结 6 1967
暗喜
暗喜 2020-12-04 09:42

I get this message when compiling C++ on gcc 4.3

error: ‘NULL’ was not declared in this scope

It appears and disappears and I don\'t know w

相关标签:
6条回答
  • 2020-12-04 10:30

    NULL can also be found in:

    #include <string.h>
    

    String.h will pull in the NULL from somewhere else.

    0 讨论(0)
  • 2020-12-04 10:34

    NULL isn't a keyword; it's a macro substitution for 0, and comes in stddef.h or cstddef, I believe. You haven't #included an appropriate header file, so g++ sees NULL as a regular variable name, and you haven't declared it.

    0 讨论(0)
  • 2020-12-04 10:41

    You can declare the macro NULL. Add that after your #includes:

    #define NULL 0
    

    or

    #ifndef NULL
    #define NULL 0
    #endif
    

    No ";" at the end of the instructions...

    0 讨论(0)
  • 2020-12-04 10:43

    GCC is taking steps towards C++11, which is probably why you now need to include cstddef in order to use the NULL constant. The preferred way in C++11 is to use the new nullptr keyword, which is implemented in GCC since version 4.6. nullptr is not implicitly convertible to integral types, so it can be used to disambiguate a call to a function which has been overloaded for both pointer and integral types:

    void f(int x);
    void f(void * ptr);
    
    f(0);  // Passes int 0.
    f(nullptr);  // Passes void * 0.
    
    0 讨论(0)
  • 2020-12-04 10:43

    To complete the other answers: If you are using C++11, use nullptr, which is a keyword that means a void pointer pointing to null. (instead of NULL, which is not a pointer type)

    0 讨论(0)
  • 2020-12-04 10:45

    NULL is not a keyword. It's an identifier defined in some standard headers. You can include

    #include <cstddef>
    

    To have it in scope, including some other basics, like std::size_t.

    0 讨论(0)
提交回复
热议问题