MSVC6からMSVC2008に切り替えようとしているときに、常に内部コンパイラエラーが発生しています。プログラムのさまざまな部分をコメントアウトする作業を重ねた後、2つの異なるCPPファイルの2行のコードでエラーを追跡しました。これらのCPPファイルは両方とも正常にコンパイルされますが、エラーが他のファイルに現れるかどうかに何らかの影響があります。
これらの行は両方とも、いくつかの複雑なネストされたテンプレートのインスタンス化を伴います。また、テンプレートパラメータの1つとして抽象クラスを使用するアプリ内の唯一の場所のようです。とは言うものの、この問題が抽象クラスまたはテンプレートのいずれかに関係していることは確かではありません。これは私が気付いた中で最も明白なことです。これらの線がまったく重要であるかどうかさえ確信できません。ただし、次のようになります。
m_phDSAttributes = new SObjDict<RWCString, SIDataSource>(&RWCString::hash);
つまり、テンプレート化されたディクショナリクラスであるSObjDict、抽象インターフェイスであるSIDataSourceがあり、パラメータはRWCStringの静的メンバー関数へのポインタです。
私はコードをいじってみましたが、あるCPPファイルから別の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)