“fatal error C1010”錯誤解決的三種方法


  嘗試寫了一個簡單的類文件,但在編譯的時候提示錯誤,具體錯誤信息如下:

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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM