2012-08-02 19 views
7

estoy recibiendo los siguientes errores al compilar el código de abajo:<error C2059: error de sintaxis: 'constante'> al compilar con const int

3>c:\hedge\hedge\hedge\AisTarget.h(22) : error C2059: syntax error : 'constant' 
3>c:\hedge\hedge\hedge\AisTarget.h(22) : error C2238: unexpected token(s) preceding ';' 

#if !defined(AisTarget_h) 
#define AisTarget_h 

#include "GeneralAviationItems.h" 
#include <string> 

namespace HEDGE { 
    using namespace GeneralAviation; 

    class AisTarget : public WaypointLatLon { 
     public: 
      static const int NO_DATA = -1000; //here is the error 
    };  
} // end namespace HEDGE 

#endif 
+0

Su '#if! Defined' se puede reemplazar por' # ifndef' btw. – chris

+0

¿Funciona si reemplaza 'static const int NO_DATA = -1000;' con 'enum {NO_DATA = -1000};'? En ese caso, tienes un compilador muy antiguo. Por favor, no nos diga que está usando Visual Studio 6 ;-) – fredoverflow

+13

Este código no se va a utilizar realmente en la aviación, ¿o sí? – stijn

Respuesta

18

Es probable que NO_DATA es ya se ha definido como una macro en otro lugar, por lo que se está expandiendo hacia algo que no está de acuerdo con la noción del compilador de un nombre de variable. Intente volver a nombrar NO_DATA a otra cosa.

Si no hubiera tal conflicto, el código podría compilarse bien, como se demostró here.

+0

Wow buen pensamiento en realidad. – chris

+0

Es por eso que no uso identificadores de mayúsculas en C++. Demasiadas macros imprudentes en bibliotecas estándar. windows.h es horrible – kotlomoy

+0

@kotlomoy: Sí, generalmente es una buena práctica. Como mínimo, los identificadores de mayúsculas deben tener algún prefijo distintivo o postfijo para evitar tales colisiones (preferiblemente en mayúsculas o minúsculas). – jxh

3

Incluso si esta publicación tiene su antigüedad: el error generalmente puede ocurrir cuando varias redefiniciones, incluso sin importar mayúsculas/minúsculas, coexisten. Esto incluye posibles definiciones de preprocesador en el archivo .vcprojx de la solución.. Considere algo como

<ItemDefinitionGroup> 
    <ClCompile> 
     <PreprocessorDefinitions>$(Configuration);%(PreprocessorDefinitions)</PreprocessorDefinitions> 
    </ClCompile> 
    </ItemDefinitionGroup> 

en el archivo mencionado anteriormente. Ahora, al tener las configuraciones de "Depurar" y "Liberar", lo más probable es que encuentre algunos problemas y una fuente potencial del error C2059. Experimenté exactamente este dilema.

+0

wow, esto me pasó a mí ahora y gracias a su publicación, pude solucionarlo en poco tiempo. – MoneyBall

Cuestiones relacionadas