Estoy tring para compilar una fuente con Visual Studio 2008 Express, pero estoy recibiendo este error:

Error C2065: 'nullptr' undeclared identifier.

Mi código:

if (Data == nullptr) 
{
    show("Data is null");
    return 0;
}

He leído en google que debo actualizar a Visual Studio 2010, pero no quiero hacer esto porque de 2008 intelisense. Este puede ser reparado o reemplazado?

  • nullptr es una nueva característica del lenguaje y parece que el compilador simplemente no lo soporta. El viejo era de hacer esto era para comprobar contra 0, pero que no es tan typesafe. También es posible que desee leer este en.wikibooks.org/wiki/More_C%2B%2B_Idioms/nullptr
  • Sólo puede utilizar nullptr en Visual Studio 2010 y posteriores, es un C++11 característica.
  • ¿Cuál es la diferencia entre el intelisense en VS2008 y VS2010?
  • Usted puede actualizar a VS2010, cómo y por qué sería que el impacto de su uso de Intellisense?
  • Usted sabe que VS2008 no admite nullptr. Usted sabe que la solución es el uso de un nuevo compilador. Y sin embargo te quiero de alguna manera encontrar una manera de cambiar el compilador sin cambiar de compilador.
InformationsquelleAutor VIclean | 2014-06-26

2 Comentarios

  1. 8

    El error que está consiguiendo es porque el compilador no reconoce la nullptr palabra clave. Esto es debido a que nullptr fue introducido más tarde en una versión de visual studio que el que usted está utilizando.

    Hay 2 maneras que usted puede ir sobre cómo obtener esta trabajando en una versión anterior. Una idea que viene de Scott Meyers c++ libro donde se sugiere la creación de un encabezado con una clase que emula nullptr como este:

    const //It is a const object...
    class nullptr_t 
    {
      public:
        template<class T>
        inline operator T*() const //convertible to any type of null non-member pointer...
        { return 0; }
    
        template<class C, class T>
        inline operator T C::*() const   //or any type of null member pointer...
        { return 0; }
    
      private:
        void operator&() const;  //Can't take address of nullptr
    
    } nullptr = {};

    De esta manera usted sólo necesita condicionalmente incluir el archivo basado en la versión de msvc

    #if _MSC_VER < 1600 //MSVC version <8
         #include "nullptr_emulation.h"
    #endif

    Esto tiene la ventaja de usar la misma palabra clave y hace que actualizar a un nuevo compilador un poco más fácil (y por favor actualiza si se puede). Si ahora compile con un nuevo compilador, a continuación, el código personalizado no se usa en absoluto y que sólo están utilizando el lenguaje c++, me siento como si esto es importante ir hacia adelante.

    Si usted no quiere tomar ese enfoque podría ir con algo que emula el viejo estilo de C enfoque (#define NULL ((void *)0)) donde se puede hacer una macro para NULL como este:

    #define NULL 0
    
    if(data == NULL){
    }

    Tenga en cuenta que no se trata exactamente de la misma como NULL como se encuentra en C, para más discusión sobre que ver esta pregunta: ¿Por qué son los punteros NULL definen de manera diferente en C y C++?

    Las desventajas de esto es que usted tiene que cambiar el código fuente y no es typesafe como nullptr. Así que debe usarse con precaución, se pueden introducir algunos pequeños errores si no se tiene cuidado y se fue a estos pequeños errores que motivó el desarrollo de nullptr en el primer lugar.

Dejar respuesta

Please enter your comment!
Please enter your name here