not error dev declared g++ nullptr

error - ¿Qué archivo de encabezado debe incluirse para usar nullptr en g++?



nullptr was not declared in this scope codeblocks (4)

GCC 4.4.1 no soporta nullptr .

Se agregó soporte para nullptr en GCC 4.6.0: http://gcc.gnu.org/gcc-4.6/changes.html

Soporte experimental mejorado para el próximo estándar C ++ 0x ISO C ++, incluido el soporte para nullptr (gracias a Magnus Fromreide), noexcept, uniones no restringidas, bucles para bucles (gracias a Rodrigo Rivas Costa), funciones eliminadas implícitamente y constructores de movimientos implícitos .

Para versiones anteriores de GCC, si desea experimentar con nullptr puede intentar la solución en esta pregunta SO:

¿Se puede emular nullptr en GCC?

Estoy usando g ++ 4.4.1 y quiero usar nullptr , pero no puedo encontrar qué archivo de encabezado se debe incluir. Tampoco parece ser una palabra clave, porque mi intento de usarla se rechaza como

error: ''nullptr'' was not declared in this scope


Recomendaría no usar nullptr como se definió anteriormente, porque puede ser peligroso. Si desea utilizar nullptr la siguiente declaración debe ser verdadera.

sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)

Sin embargo, sizeof(nullptr) (como se define anteriormente) no cumplirá con esta regla. En realidad se evaluará a sizeof(bad nullptr) = 1 .

Esta es una implementación correcta.

#pragma once namespace std { //based on SC22/WG21/N2431 = J16/07-0301 struct nullptr_t { template<typename any> operator any * () const { return 0; } template<class any, typename T> operator T any:: * () const { return 0; } #ifdef _MSC_VER struct pad {}; pad __[sizeof(void*)/sizeof(pad)]; #else char __[sizeof(void*)]; #endif private: // nullptr_t();// {} // nullptr_t(const nullptr_t&); // void operator = (const nullptr_t&); void operator &() const; template<typename any> void operator +(any) const { /*I Love MSVC 2005!*/ } template<typename any> void operator -(any) const { /*I Love MSVC 2005!*/ } }; static const nullptr_t __nullptr = {}; } #ifndef nullptr #define nullptr std::__nullptr #endif


Si no tiene el último gcc que admite C ++ 11, intente usar NULL en lugar de nullptr.


Uso -std = c ++ 0x para habilitar la función nullptr con gcc 4.6.3