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!
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. –
@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! –