嘗試寫了一個簡單的類文件,但在編譯的時候提示錯誤,具體錯誤信息如下:
fatal error C1010: unexpected end of file while looking for precompiled header directive
從網上搜到了一些解決辦法,具體辦法如下 :
1、在類的實現cpp文件的頭部第一行加上“#include "stdafx.h"”。
2、關閉預編譯頭文件選項。具體步驟如下:
Project Settings(Alt+F7) -> C/C++選項卡 -> Category組合框Precompiled Headers -> Not Using Precompiled headers
3、創建空工程,然后將關鍵代碼文件移動到工程目錄 。如下圖。

問題原因分析 :
首先看一下錯誤提示,錯誤信息說的是:查找預編譯頭文件失敗。那么什么又是預編譯頭文件呢?
所謂預編譯頭文件,就是把一個工程(Project)中使用的一些MFC標准頭文件(如Windows.H、Afxwin.H)預先編譯,以后該工程編譯時,不再編譯這部分頭文件,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯頭文件通過編譯stdafx.cpp生成,以工程名命名,由於預編譯的頭文件的后綴是“pch”,所以編譯結果文件是projectname.pch。編譯器通過一個頭文件stdafx.h來使用預編譯頭文件。stdafx.h這個頭文件名是可以在project的編譯設置里指定的。編譯器認為,所有在指令#include "stdafx.h"前的代碼都是預編譯的,它跳過#include "stdafx. h"指令,使用projectname.pch編譯這條指令之后的所有代碼。因此,需要進行預編譯頭文件的工程的所有CPP實現文件第一條語句都必須是:#include "stdafx.h"。如果工程不需要進行預編譯頭文件則不需要加該語句。
問題解決思路:
解決辦法1就是這么處理的;解決方案2是關閉了工程的預編譯頭文件選項,所以也可以;解決方案3和解決方案2類似,但更徹底,通過創建一個空的工程直接創建了一個不需要預編譯頭文件的工程。
解決方案2的代碼示例:
test.cpp的代碼:
1 // instructfile.cpp : Defines the entry point for the console application. 2 // 3 #include "stdafx.h" 4 #include "myfile.h" 5 #include <iostream> 6 7 int main(int argc, char* argv[]) 8 { 9 MYFILE pefile1; 10 pefile1.GetType(); 11 system("pause"); 12 return 0; 13 }
myfile.cpp的代碼:
1 #include "stdafx.h" 2 //上面這行代碼是關鍵,並且一定要加到所有有效代碼的前面。 3 #include "myfile.h" 4 #include <iostream> 5 6 MYFILE::GetType() 7 { 8 std::cout << "the file is a mz header file." << std::endl; 9 }
myfile.h的代碼:
1 class MYFILE 2 { 3 public: 4 GetType(); 5 };
工程fileview如下圖:

只貼出方案1的代碼,如果有興趣可以嘗試方案2和方案3。
