2012-08-02 3 views
7

ich die folgenden Fehler bin immer, wenn Sie den folgenden Code kompilieren:<error C2059: Syntaxfehler: 'constant'> beim Kompilieren mit 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

Ihre '#if! Defined' kann durch' # ifndef' btw ersetzt werden. – chris

+0

Funktioniert es, wenn Sie 'static const int NO_DATA = -1000;' durch 'enum {NO_DATA = -1000};'? In diesem Fall haben Sie einen sehr alten Compiler. Bitte sagen Sie uns nicht, dass Sie Visual Studio 6 verwenden ;-) – fredoverflow

+13

Dieser Code wird nicht wirklich in der Luftfahrt verwendet, oder? – stijn

Antwort

18

Es ist wahrscheinlich, dass NO_DATA ist bereits an anderer Stelle als Makro definiert, und so erweitert es sich in etwas, das nicht mit der Vorstellung des Compilers von einem Variablennamen übereinstimmt. Versuchen Sie, NO_DATA zu etwas anderem umzubenennen.

Wenn es keinen solchen Konflikt gab, würde der Code sozusagen kompiliert werden, wie here demonstriert.

+0

Wow, gut zu denken. – chris

+0

Deshalb verwende ich in C++ keine Großbuchstaben. Zu viele rücksichtslos benannte Makros in Standardbibliotheken. windows.h ist schrecklich – kotlomoy

+0

@ kotlomoy: Ja, das ist in der Regel gute Praxis. Zumindest sollten Großbuchstabenidentifikatoren ein Unterscheidungs-Präfix oder Postfix aufweisen, um solche Kollisionen zu vermeiden (vorzugsweise in gemischten oder Kleinbuchstaben). – jxh

3

Auch wenn dieser Beitrag sein Alter hat: Der Fehler kann im Allgemeinen auftreten, wenn mehrere Neudefinitionen, unabhängig von Groß-/Kleinschreibung, koexistieren. Dies schließt potenzielle Präprozessordefinitionen in der .vcprojx Datei der Lösung ein!. Betrachten Sie etwas wie

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

in der oben genannten Datei. Nun, mit "Debug" und "Release" -Konfigurationen werden Sie wahrscheinlich einige Probleme und eine mögliche Quelle für den C2059-Fehler haben. Ich habe genau dieses Dilemma erlebt.

+0

definiert wow, das ist mir gerade passiert und dank deines Posts konnte ich es in kürzester Zeit beheben. – MoneyBall

Verwandte Themen