我一直在嘗試從MSVC6切換到MSVC 2008時遇到內部編譯器錯誤。在大量工作註釋掉程序的不同部分後,我將錯誤追溯到兩行代碼兩個不同的CPP文件。這兩個CPP文件都可以編譯成功,但對某個錯誤是否顯示在其他文件中有影響。VS2008內部編譯器錯誤
這兩行都涉及實例化幾個複雜的嵌套模板。他們似乎也是應用程序中使用抽象類作爲模板參數之一的唯一地方。也就是說,我不確定這個問題涉及到抽象類還是模板,這只是我注意到的最明顯的事情。我甚至無法確定這些線是否有意義。下面是他們的樣子,雖然:
m_phDSAttributes = new SObjDict<RWCString, SIDataSource>(&RWCString::hash);
所以我們已經有了SObjDict,了模板化的字典類,SIDataSource,一個抽象的接口,參數是指向RWCString的靜態成員函數。
我一直在玩一些代碼,並且偶爾會出現從一個CPP文件移動到另一個的錯誤(例如,我將一堆模板聲明從使用class
更改爲typename
),但是我找不到任何押韻或理由。
我不知道如何進一步調試這個問題。下面是編譯器輸出的確切錯誤(我的源文件的名稱已更改)。互聯網上沒有任何地方提及它。我非常渴望有關如何進行的任何建議。我不希望有人說「哦,你只需要做XYZ」,但是如何調試這種問題的指針將不勝感激。
1>d:\Dev\webapi.cpp : fatal error C1001: An internal error has occurred in the compiler.
1>(compiler file 'f:\dd\vctools\compiler\utc\src\p2\p2symtab.c', line 5905)
您是否向Microsoft投訴?該錯誤在編譯器中,即使您的代碼有問題,您也有權這樣做。無論如何,他們的編譯團隊可能會對問題是什麼有最好的想法。 – 2009-06-17 19:52:21
@David:我們還沒有向MS發送錯誤報告。在查看與我們類似的其他錯誤報告(顯然p2symtab.c文件中存在很多錯誤)後,他們會拒絕任何不包含複製腳本的錯誤報告。我試圖將我們的bug降低爲簡單的repro腳本失敗。 – rmeador 2009-06-17 19:54:07