如果你是一位老資格的 Visual C++ 使用者,那一定會對 Visual C++ 的 fatal error C1001 不會陌生。如果你在用 VC6 編一個規模較大的工程,如果你在用 VC6 編譯一個用到了模板的工程,那恭喜你,這個錯誤會時不時冒地出來和你打招呼,搞得你手足無措。
詳細的出錯資訊如下:
fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1794)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information Error executing cl.exe.
網上已經有其他人寫的解決方案了,不過貌似都很麻煩,而且還有副作用(例如有一種是要求把先行編譯頭選項關閉,那會導致整個工程的編譯如同老牛拉車)。而官方的針對此問題的描述在這裡:http://support.microsoft.com/?scid=kb%3Ben-us%3B305980&x=14&y=12
,不過,按照微軟一貫的風格,按照它的指導去解決問題,可能需要具有無比的運氣。
經過老漢本人多次驗證,在 VC6 中可以用如下方法解決:在出錯資訊中找到出錯時正在編譯的那個 cpp 檔案的名字,把它記下來;在 FileView 視窗中的 source files 下建立一個子檔案夾,把剛才記住的 cpp 檔案移動到這個檔案夾中;然後再次編譯。(順便說一下,這其實是改變了工程中 cpp 檔案的編譯順序)可以很負責任的說,老漢自己驗證的成功率在 99% 以上。
這個技術本來是專門針對於 VC6 的,因為從 VS2003 開始,老漢幾乎再也沒有遇到過這個問題,所以也就一直沒有共用出來。可惜曆史總是會重演,剛才一個在玩兒 VS2005 的兄弟竟然在摸死你上和我說編譯器報以下錯誤:
fatal error C1001: 編譯器中發生內部錯誤。(他的是中文版,英文版的錯誤資訊似乎應該是:fatal error C1001: An internal error has occurred in the compiler.)
老漢一眼就看出了這絕對是前述問題借屍還魂了,所以把秘籍告訴了他,一次搞定!唯一需要注意的就是,VS2005 裡,FileView 已經變成了 Solution Explorer(中文是“解決方案管理器”),而 New Folder 功能表項目也變成了“Add->New Filter”(中文可能是“添加->新篩選器”)。僅此而已。
祝遇到這個問題的兄弟好運,能搜到我的這篇文章。