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:
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