0

Ich arbeite an einem C++ - Programm, das mit Visual Studio 2013 kompiliert wurde, aber auch mit Visual Studio 2008, beide im Freigabemodus, kompiliert werden muss. Ich verwende #ifdef Blöcke, um Alternativen zu Funktionen/Funktionen hinzuzufügen, die damals nicht unterstützt wurden. Der folgende Codeblock ist nur ein Beispiel:Compilerfehler in inaktivem #ifdef Block

struct someStruct 
{ 
#ifdef _VS2008 // defined in preprocessor definition 
    someStruct() 
    { 
     number = -1; 
    } 
    int number; 
#else 
    int number = -1; 
#endif 
    char* Text; 
}; 

und ich erhalte den folgenden Compiler-Fehler auf der Linie int number = -1.

Fehler C2864: 'SomeStruct :: number': nur statische const integralen Daten Mitglieder können

Da die Codeblöcke unter #else innerhalb einer Klasse initialisiert werden (in diesem Fall int number = -1) zu sein scheinen und sollte inaktiv sein, warum generiert der Compiler Fehler über sie?

Jede Eingabe wird geschätzt!

+0

Weil '_VS2008' entgegen Ihren Erwartungen nicht definiert ist. Übrigens, wenn Sie einen Pre-C++ 11-Compiler unterstützen müssen, macht es nicht viel Sinn, doppelte Implementierungen jeder C++ 11-Verknüpfung zu schreiben - Sie machen den Code nur schwerer lesbar und riskieren das zwei Implementierungen werden nicht mehr synchronisiert. –

+0

@MatteoItalia Tut mir leid, ich habe das nicht geklärt, aber '_VS2008' habe ich in der Präprozessordefinition definiert. Ich wurde gebeten, die ifdefs zu verwenden, und ich glaube, es liegt daran, dass diese Anwendung nur selten verwendet wird und nur alle paar Jahre aktualisiert wird. Ich denke, ich musste das schnell hinter mich bringen. Danke für den Hinweis! –

Antwort

0

Die Lösung wurde gefunden. Die Codebausteine ​​befinden sich in einem DLL-Projekt und das Hauptprojekt enthält einige der exportierten Header von es. Ich wusste nicht, dass ich auch im Hauptprojekt _VS2008 definieren musste.

1

sollten Sie verwenden _MSC_VER Makro Visual Studio Version zu erkennen:

#if (_MSC_VER == 1500) 

1500 bedeutet hier VS2008. Die Liste der Versionen ist here.

+0

Danke für die Information. Ich habe diesen Post auch gefunden, aber ich bekomme immer noch Fehler. Ich werde meine Frage mit dem Fehler aktualisieren, den ich bekomme. –