<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    fatal error C1010: 在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include "stdafx.h

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    錯誤描述:fatal error C1010: 在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include "stdafx.h"”?


    錯誤分析:     此錯誤發生的原因是編譯器在尋找預編譯指示頭文件(默認#include "stdafx.h")時,文件未預期結束。沒有找到預編譯指示信息的頭文件"stdafx.h"。     (因為工程中的每個cpp文件屬性默認都是使用預編譯頭(/YU)的,但是添加的第三方文件并沒有 #include "stdafx.h" 預編譯指示頭,所以編譯器在此cpp文件中一直到末尾都沒有找到它)     我的這個問題發生于我通過添加文件的方式,向MFC內添加現有的一大坨.h和.cpp文件。這些.h和.cpp文件是屬于標準C++的開源源代碼范疇,與MFC無更深層次的關系。
    解決方式: 一. 1) 在解決方案資源管理器中,右擊相應的.cpp文件,點擊“屬性” 2) 在左側配置屬性中,點開“C/C++”,單擊“預編譯頭” 3) 更改右側第一行的“創建/使用預編譯頭”,把選項從“使用預編譯頭(/Yu)”改成“不使用預編譯頭” 4) 注:每一個報錯的.cpp都要如此更改哦~辛苦一下唄~ 二. (不推薦) 1)在解決方案右擊工程,點擊屬性 2)在配置屬性 -> c/c++ -> 預編譯頭 中 將 “使用預編譯頭(/YU)” 改為 “不適用預編譯頭” 這種做法會使每次編譯過程非常緩慢
    備注: 1) 貌似也可以直接在.cpp頭文件上include stdafx.h。但沒嘗試如此修改,因為不想破壞源代碼的標準性^_^ 2) 感慨一下VC在識別、編譯這方面的遲滯-_-,或許是因為太強大了吧,就沒考慮周全,竟然還需要手動修改~ 3) 有點懷念Qt了……     補充的資料: 出處:http://blog.csdn.net/hotandhot/archive/2006/10/23/1346195.aspx  

    一、概念:

    1、預編譯:就是編譯器首先編譯某個文件(稱為預編譯頭文件),然后將這個編譯結果保存起來,之后如果有其他源文件include了這個“預編譯頭文件”的時候,則自動從這個編譯結果提取需要的信息進行編譯。

    2、預編譯結果文件(Precompiled header file):就是那個用來保存已經編譯了的符號信息的文件(.PCH作為后綴)

    3、生成預編譯結果文件(Create Precompiled header file):我們說源文件A通過文件B“生成預編譯結果文件”是指編譯A的時候將其中編譯B的編譯結果保存成預編譯結果文件。一般使用向導的話,A文件就是“stdafx.cpp”,B文件是“stdafx.h”。stdafx.cpp中就一行語句:

    #include “stdafx.h”

    4、使用預編譯頭(Using precompiled header):我們說某個源文件(a.cpp)通過“stdafx.h”來使用預編譯結果是指編譯a.cpp的時候,如果a.cpp第一行include語句是#include “stdafx.h”的話,那么直接取預編譯結果文件的結果,不再重新編譯”stdafx.h”

    二、向導是怎么做的?

    1、設置“stdafx.cpp”的預編譯選項是通過“stdafx.h”文件來“生成預編譯結果文件”。

    2、其他源文件的預編譯選項設置是通過“stdafx.h”來“使用預編譯頭”

    三、使用原則?

    1、將相對穩定的頭文件(比如CRT,STL,第三方固定的庫)全部寫在stdafx.h中。(是否使用stdafx.h依賴個人喜好,不過使用stdafx.h可以和向導保持一致)

    2、全部源文件第一行都加#include “stdafx.h”。

    3、一些不能修改的源文件(如果公共的代碼,不具備權限修改的代碼),設置他的預編譯選項是“不使用預編譯頭”。注意,一定不能是選擇“自動生成預編譯頭”,因為這樣會將stdafx.h的結果沖掉(這個不知道是BUG還是設計的問題了,.^_^。)。

    四、Q&A

    Q、為什么不全部使用“自動生成預編譯頭文件”?

    A、“自動生成預編譯頭文件”和什么都不用沒有什么兩樣,編譯速度沒有質的提高。

    Q、手工添加一個新的源文件到項目的時候,經常出現類似錯誤:

    fatal error C1010: unexpected end of file while looking for precompiled header directive

    A、因為向導缺省的設置是“使用預編譯頭”,但是你新加的文件并沒有在第一行包含“stdafx.h”。解決的方法要么修改成“不使用預編譯頭”,要么添加一行#include “stdafx.h”

    Q、加stdafx.h和stdafx.cpp總覺得是和編譯平臺綁定了,不具備移植性?

    A、其實,注意一下stdafx.h的寫法就沒有問題了。我的解決方案是(stdafx.h的內容):

    –begin of file stdafx.h

    #ifdef _WIN32

    #include “win.h”    // 泛指window下的公共頭文件

    #else

    #include “linux.h”    // 泛指linux下的公共頭文件

    #endif

    #include “crt.h”      //泛指c標準庫

    #include “stl.h”      //泛指STL庫

    –end of file

    或者更加簡單一點,如果不是VC編譯器,那么stdafx.h就什么內容都不寫!

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全