2016-07-22 414 views
3

出於某種原因,我無法解釋,編譯器輸出一個錯誤說,它發現了一個意想不到的#else令牌。意外的#else

這發生在文件的開頭:

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

有代碼,peice的前沒有想到的幾個(單行)的意見。

這個錯誤發生在.cpp文件。你在上面看到的是文件的開始。在此之前什麼也沒有。

我嘗試添加上述定義的代碼之前,下面的代碼,現在的錯誤是一個意外的#ENDIF

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

所以我懷疑有問題與其中包含以下所包含的stdafx.h文件代碼:

#ifndef STDAFX_H_INCLUDED 
#define STDAFX_H_INCLUDED 

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

using namespace ATL; 

#endif // STDAFX_H_INCLUDED 

確實沒有什麼特別的地方。我還包含來自stdafx.cpp文件的stdafx.h文件,該文件只包含#include語句,並且編譯正確。

下面是該項目的預處理器定義:

_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 

還有一些額外的信息: 編譯爲Windows CE 6使用Visual Studio 2008

什麼會導致此?謝謝。

+1

Upvoted to counter downvote。人們在提問時太容易投降,我認爲你的觀點是完全合理的。 – Smeeheey

+0

這不是沒有道理,它似乎缺乏一些細節。我不認爲有可能通過提供的信息找出問題。但是,我可能是錯的,所以讓我看看答案。 –

回答

9

基於名稱stdafx,我認爲這是一個預編譯的頭。

預編譯頭必須是文件中的第一個包括(預處理)指令,則不能(甚至不是一個IFDEF)之前,它把任何東西。唯一的例外是幾條評論欄,因爲無論如何這些評論欄都會被忽略。

根據您的示例,您應該將#ifdef _USING_MFC放入您的stdafx.h,並在其中包含Afx.h

+0

說明會發生什麼情況:直到'#include「stdafx.h」'的所有內容都被預編譯的'stdafx.pch'的內容替換。這也取代了'#if'而不是'#else',所以第一條未預編譯的行確實是'#else'。這當然是意想不到的。 – MSalters