• ベストアンサー

MFCのエラーについて

「プリコンパイル済みヘッダーの検索中に予期せぬ EOF を検出しました」 というエラーが出ました。これを直すのにいろいろ試し結局 #include "stdafx.h"の表記をすることで直りました。 このstdafxヘッダーファイルはMFCを使用した時点で用意されるのですがこれを使うとなぜこのエラーがなくなるのかがわかりません。 どなたかおしえてください。よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

説明しようとすると、結構ややこしいのですが…。 VC++での一般的なプログラムの作成手順で、以下のようなファイルが出来ていたとします。 -----Test.cpp----- #include "stdafx.h" int main(int argc, char* argv[]) {   printf("Hello World!\n");   return 0; } これに、以下の.hファイルと.cppファイルを追加します。 -----foo.h----- int foo(void); -----foo.cpp----- int foo(void) { return 0; } この時点でコンパイルを実行すると、 d:\ほげほげ\foo.cpp(5) : fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 が出ます。 これは、 [プロジェクト]-[設定] 「プロジェクトの設定」ダイアログ 左上「設定の対象」に「Win32 Debug」 左側treeで、~\Sourcr Files\foo.cppを選択、 右側「C/C++」タブ カテゴリ「プリコンパイル済みヘッダー」を選ぶと、 「プリコンパイル済みヘッダー ファイル(pch)を使用」 このファイルまで「stdafx.h」 が選ばれていると思います。 この設定のために、コンパイラはfoo.cppのファイルを1行目から順に「stdafx.h」のインクルードを行っている行を検索します。 該当行が見つかった場合は、それ以前の行のソースコードはpchに予めコンパイルされているものとして無視します。 この例の場合は該当行が見つかる前にファイル末尾のEOFが見つかったために、上記のようなエラーが出てくるという仕組みです。 -- 通常はソース先頭の滅多に変更の無い#include部分を予めコンパイルしておくと言う事ですから、コンパイル時間が稼げますが、前述したようにstdafx以前のソースコードの変更を無視してくれるので、変なトラブルも起きる事があります。 個人的には嫌いなので、 #include "stdafx.h"行を削除。 stdafx.hファイルを削除。 ワークスペースのFileViewからstdafx.hおよびstdafx.cppを削除。 上記の設定で、pchを使用しない設定に変更。 と、使わないようにしています。 最近のPCの性能だと、コンパイル時間って気にならない事も多いし。

wsy920
質問者

お礼

返事遅くなって申し訳ありません。 まだまだわからない部分がありますがちょっとずつ理解して以降と思います。

その他の回答 (1)

回答No.1

"プリコンパイル・ヘッダを使用する" オプションをつけてコンパイルしているとき、 stdafx.h の includeを抜くとそうなります。

関連するQ&A

  • Relaeaeモードでビルドできない。

    こんにちは。皆様に教えて頂きたいのですが、いまDebugモードでビルドできているのですが、Releaseモードで同様にやると、「fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました」と出ます。そこで、 関係するsourceの*.cのヘッダーに#include "stdafx.h"を加えたところ、「fatal error C1853: 'Release/***.pch' プリコンパイルされたヘッダー ファイルは、このバージョンのコンパイラと互換性がありません。」とエラーが出ます。どこが間違っているのかお分かりの方教えて頂けませんでしょうか?よろしくお願いいたします。

  • Visual C++ 2008で<stdio.h>のインクルード文が使えない!?

    #include <stdio.h> int main(){ printf("hello!"); } で実行すると、 : warning C4627: '#include <stdio.h>': プリコンパイル済みヘッダーの使用を検索中にスキップされました ディレクティブを 'stdafx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します .\■■■.cpp(5) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? と言ったエラーが起きてしまいます。 ちなみに、インクルードファイルらしき物を削除しまくった覚えがあります…。100%これが原因かと。 これが原因だとしたらどうすればいいんでしょうか? あと、DXライブラリが使えるように設定を変えたこともあります。 どこの何を変えたかは忘れてしまいましたけど。

  • VisualStudio2005を使っています。

    最近VisualStudioを買い、試しに #include <stdio.h> int main(void) { printf("Hello,World"); return 0; } と打ち込みましたが、 fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? とのエラーメッセージが出て困っております。 この場合は具体的にどのようなことをすればよいのでしょうか?よろしくお願いします。

  • エラーがでるようになりました。

    vs2005を使っているんですが、 「c:\documents and settings\rm\my documents\visual studio 2005\projects\o.c\o.c.cpp(17) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?」 というわけの分からない表示が出ました。 どのプログラムも実行できず、この表示が出ます。 急にそうなったんですが、特別なことをした覚えはありません。

  • opencvにおけるコンパイルエラー解決法

    【visual studio2010におけるopencv利用上でのコンパイルエラー】 当方visual studioもopencvも初心者です。踏まえてお答えいただけると大変助かります。 この度、オプティカルフローに関する勉強をしようとopencvの利用を始めました。 しかし、以下の文章が出てきてコンパイルができません。 optical_flow.cpp(1): warning C4627: '#include "cv.h"': プリコンパイル済みヘッダーの使用を検索中にスキップされました ディレクティブを 'StdAfx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します optical_flow.c++(2): warning C4627: '#include "highgui.h"': プリコンパイル済みヘッダーの使用を検索中にスキップされました ディレクティブを 'StdAfx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します (この後は、上記ヘッダファイル内で宣言していると思われる関数が無効である。という旨のエラーメッセージが延々と続きます) visualstudio上の設定はしっかりと行い、環境設定上のpath設定も行いました。なお、設定は下記URLに従って行い、白い画面が出るプログラムまでは正常に動作しました。 http://imagesensing.seesaa.net/article/200532994.html しかし、以下のHPに記載されているオプティカルフローのサンプルプログラムを動かそうとすると上記のヘッダファイルが開けない。という旨のエラーメッセージが出ます。 http://opencv.jp/sample/optical_flow.html そのままコンパイルしようとした際、プリコンパイルヘッダーをソースに追加する指示が一度出たので#include "StdAfx.h"はソースに追加してあります。 プリコンパイルヘッダーを使用しない。という設定も試みましたがダメでした。 解決法を教えてください。宜しくお願いします。

  • 一番上だけ・・・?

    初めて投稿させていただきます。 私は今WEBを見て、DirectXとVisualStudio2005でC++のプログラムを作っています。 ユーザー定義のソースファイルとヘッダーファイル、リソースファイルを使っていて、そのうちヘッダーファイルを「stdafx.h」で参照したのですが、以下のようなエラーが出ました。 (以下プロジェクト名と各種ファイル名は一部仮称です) ------ ビルド開始: プロジェクト: prg, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\prg\stdafx.h(38) : fatal error C1083: include ファイルを開けません。'hdf01.h': No such file or directory prg - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== おそらく、以下のところに問題があると思われます。 ----------[SAMPLE CODE]----------(stdafx.h内) // TODO: プログラムに必要な追加ヘッダーをここで参照してください。 #include "hdf01.h" #include "hdf02.h" #include "hdf03.h" #include "hdf04.h" #include "hdf05.h" ----------[SAMPLE CODE]---------- そこで、この掲示板を参考にして次のような方法を取りました。 (1)""を<>に変えてみる (2)[ツール]-[オプション]からインクルードファイルにパス先を登録してみる (3)「"hdfXX.h"」を相対パスにする (4)「"hdfXX.h"」を絶対パスにする 結果は、(1)と(3)は元と同じエラー、(2)と(4)は300以上のエラーが出て、コンパイルが中断されてしまいました。 気になるのは、「"hdf01.h"」と「"hdf02.h"」の位置を入れ替えてみると、「hdf02.h だけを読み込めない」といったエラーが出たことです。 その後もヘッダーファイルを記述する順番を替えてみましたが、どうやら「一番上のヘッダーファイル」だけを読まないらしいです。 実は、WEBで見たプログラムはVC++6.0向けのプログラムで、そのままコピーしてVS2005に貼り付けたところ、 ------ ビルド開始: プロジェクト: SampleSTG, 構成: Debug Win32 ------ コンパイルしています... stdafx.cpp コンパイルしています... ssf01.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf.cpp(537) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf02.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf02.cpp(54) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf03.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf03.cpp(136) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? ssf04.cpp c:\documents and settings\nec-pcuser\my documents\visual studio 2005\projects\prg\source\ssf04.cpp(370) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? コードを生成中... スキップ中... (関連する変更は検出されませんでした) prg.cpp prg - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== というエラーが出たため見直してみたところ、stdafx.hに「// TODO: ~ 」といったものを見かけたため、上のように書き加えました。 PSDKやDirectXのパスは通っています。 アプリケーションは「Win32 Application」→「Win32 プロジェクト」と読み替えて、「プロジェクト名を入力して[OK]を押したら、次の画面でいきなり[完了]を押す」と、指示通りに作成しました。 ちなみに、OSは WindowsXP HomeEdition、 VS2005は AcademicEditionです。 よろしくお願いいたします。

  • VC++でCORBAを使用するには

    VC++でCORBAを使用する方法がわからなくて困っています。 idlをコンパイルしてできたxxxC.CPPというファイルをSourceFilesに追加してリビルドをかけると、「fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」というエラーがでます。 初心者のため、やり方があっているのかどうかもわからない状態です。

  • VC++でCのプログラムを混在させるには

    VC++で拡張子がCのプログラムを挿入、プロジェクト、ファイルの追加で追加 すると atal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 のエラーが出ます。 ここでファイル名の拡張子をCPPにすると、追加はできますが、 拡張子Cのままでプロジェクトに追加するにはどうすればいいでしょうか?

  • error C2065: error C2057: が出てしまいます。

    VC++6.0 ダイアログベースです。 自動で作られたダイアログのヘッダファイルを 自作で作ったクラスのヘッダファイルでインクルードした所 下記のようなエラーが出てしまいました。    error C2065: 'IDD_MY_DIALOG' : 定義されていない識別子です。 error C2057: 定数式が必要です。    まだ自作で作ったクラスはクラスになる前のインクルードのみ書かれた 状態ですが・・・。      //自作する予定のヘッダファイル(まだインクルードのみ) #pragma once #include "DLGTEST.h"//自動で作られたダイアログ //自作のファイル(まだインクルードのみ) #include "stdafx.h" #include "gakusei.h"    自動で作られたファイルをインクルードすることは出来ないのでしょうか? もしインクルードできるならどのようにしたらインクルードできるのでしょうか? オンラインマニュアルで調べたのですが、良くわかりませんでした。 /**オンラインマニュアルより、解決方法**/   stdafx.h からの VC_EXTRALEAN 行を定義する 1 つソリューションが#を削除できます。 これは、通信とレジストリとほかのエリアの MFC によってプロジェクトで直接が使用されない Win32 API を保持します。 含められない代替は、#のセットでの行が「#が VC_EXTRALEAN を定義するのを」置き換えるために、 上記で一覧された行を定義しこと、そしてハードウェアがそれその#が定義する削除によって選択的に登録されこと、です。 たとえば 通信 API が呼び出される場合、#がすべて上記で stdafx.h に「#が NOCOMM を定義すると、」行の以外、 一覧された行を定義するのを持つ可能性があります。

  • VisualStudio.netのC++でC言語の勉強をしたいです

    VisualStudio.netのC++でC言語の勉強をしようと思っているのですが C言語のコンパイルの仕方がわかりません。 新規プロジェクト>>WIN32>>win32コンソールプロジェクト でプロジェクトを開きソースを書いてビルドしてみると エラー出てしまいました。 「fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。」 ソースは以下のとおりです。 #include <stdio.h> void hello(void); void hello(void) { printf("hello"); return; } int main(void) { hello(); return 0; } C言語をコンパイルする方法に間違ったことをしているのでしょうか? それともソースのバグなのでしょうか? 初心者質問ですがよろしくお願いいたhします。

専門家に質問してみよう