2016-07-22 37 views
3

私は説明できない何らかの理由で、コンパイラが予期せぬ#elseトークンが見つかったというエラーを出力しています。予期しない#else

これは、ファイルの先頭に発生します。

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

コードのpeiceは、いくつかの(シングルライン)のコメントを期待する前には何もありません。

このエラーは、.cppファイルで発生します。上記の内容はファイルの始まりです。その前には何もありません。

だから私は、次のものが含ま含まSTDAFX.Hファイルに問題があると疑われる

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

私は上記の定義されたコードの前に次のコードを追加してみました、そしてエラーは今予期しない#endifのですコード:

#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文だけが含まれており、正しくコンパイルされています。これを引き起こしているだろう何のVisual Studio 2008

を使用してWindows CE 6のためのコンパイル :

_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 

そして、いくつかの余分な情報:ここでは

は、プロジェクトのプリプロセッサ定義されていますか?ありがとうございました。

+1

upvoted counter downvote。人々は質問であまりにも簡単に周りをスローダウンする、私の意見では、あなたのことは完全に合理的です。 – Smeeheey

+0

それは不合理ではない、ちょうどそれがいくつかの詳細が欠けているようだ。私は提供された情報で問題を理解することは可能ではないと思います。しかし、私は間違っているかもしれないので、私は答えを読むことができます。 –

答えて

9

stdafxの名前に基づいて、それはプリコンパイル済みヘッダーであると仮定します。

プリコンパイラヘッダーは、ファイル内の最初のインクルード(プリプロセッサ)ディレクティブでなければなりません。その前に(ifdefでなくても)何も置くことはできません。とにかく無視されるように、唯一の例外はいくつかのコメント行です。

あなたの例に基づいて、に#ifdef _USING_MFCを置き、そこにAfx.hを含める必要があります。

+0

説明何が起こるか: '#include" stdafx.h "までの全てが、プリコンパイルされた' stdafx.pch'の内容に置き換えられます。これは '#if'を置き換えますが、'#else'は置き換えないので、プリコンパイルされていない最初の行は実際に '#else'です。それは確かに予期しないことです。 – MSalters

関連する問題