2016-07-22 22 views
3

Aus irgendeinem Grund, den ich nicht erklären kann, gibt der Compiler einen Fehler aus, der besagt, dass er ein unerwartetes #else-Token gefunden hat.Unerwartete #else

Dies geschieht am Anfang der Datei:

#if defined(_USING_MFC) 
    #include "stdafx.h" 
#else 
    #include <windows.h> 
#endif 

Es gibt nichts vor diesem Stückchen Code ist mehrere (einzeilig) Kommentare erwarten.

Dieser Fehler tritt in einer CPP-Datei auf. Was Sie oben sehen, ist der Anfang der Datei. Da ist nichts davor.

ich den folgenden Code oben definiert, bevor der Code versucht, das Hinzufügen, und der Fehler ist jetzt ein unerwartetes #endif

#if 1 
    #include "stdafx.h" 
#endif 

So vermute ich, es ein Problem mit der mitgelieferten stdafx.h-Datei ist, die folgende enthält code:

#ifndef STDAFX_H_INCLUDED 
#define STDAFX_H_INCLUDED 

#include <Afx.h> 
#include <Windows.h> 

using namespace ATL; 

#endif // STDAFX_H_INCLUDED 

Es gibt wirklich nichts Besonderes. Ich schließe diese stdafx.h-Datei auch aus einer stdafx.cpp-Datei ein, die nur die Anweisung #include enthält, und sie wird korrekt kompiliert.

Hier sind die Projekt Präprozessordefinitionen:

_DEBUG 
_WIN32_WCE=$(CEVER) 
UNDER_CE 
WINCE 
DEBUG 
_WINDOWS 
$(ARCHFAM) 
$(_ARCHFAM_) 
_UNICODE 
UNICODE 
_TERMINAL_FALCONX3_CE6 
_NO_CPP_EXCEPTIONS 
_DONT_INCLUDE_WS_HEADERS 
_USING_MFC 

Und einige zusätzliche Informationen: Kompilieren für Windows CE 6 Visual Studio 2008.

Was würde dies verursachen verwenden? Vielen Dank.

+1

Upvoted, um dem Downvote entgegenzuwirken. Die Leute werfen die Frage zu leicht auf Fragen herum, meiner Meinung nach ist das völlig in Ordnung. – Smeeheey

+0

Es ist nicht unvernünftig, es scheint nur, dass es einige Details fehlen. Ich denke nicht, dass es möglich ist, das Problem mit den zur Verfügung gestellten Informationen zu lösen. Aber ich könnte mich irren, also lass mich die Antwort lesen. –

Antwort

9

Basierend auf dem Namen stdafx, nehme ich an, es ist ein vorkompilierter Header.

Ein Precompiler-Header muss die erste include (Präprozessor) Direktive in der Datei sein, Sie können nichts (nicht einmal ein ifdef) davor setzen. Einzige Ausnahme sind ein paar Kommentarzeilen, da diese sowieso ignoriert würden.

Basierend auf Ihrem Beispiel sollten Sie die #ifdef _USING_MFC in Ihre stdafx.h und Afx.h dort einfügen.

+0

Erklärung was passiert: Alles bis zu "#include" stdafx.h "' wird durch den Inhalt des vorkompilierten 'stdafx.pch' ersetzt. Dies ersetzt auch das '# if', aber nicht das' # else', so dass die erste nicht vorkompilierte Zeile tatsächlich '# else' ist. Das ist sicherlich unerwartet. – MSalters