在尝试从 MSVC6 切换到 MSVC 2008 时,我一直遇到内部编译器错误。经过大量工作注释掉程序的不同部分后,我将错误追溯到两个不同 CPP 文件中的两行代码。这两个 CPP 文件都成功编译,但不知何故会影响错误是否出现在其他文件中。
这两行都涉及实例化几个复杂的嵌套模板。它们似乎也是应用程序中唯一使用抽象类作为模板参数之一的地方。也就是说,我还不确定这个问题是涉及抽象类还是模板,这只是我注意到的最明显的事情。我什至不能确定这些线是否重要。不过,它们是这样的:
m_phDSAttributes = new SObjDict<RWCString, SIDataSource>(&RWCString::hash);
所以我们有了SObjDict,一个模板化的字典类,SIDataSource,一个抽象接口,参数是一个指向RWCString的静态成员函数的指针。
我一直在玩一些代码,偶尔会出现从一个 CPP 文件移动到另一个文件的错误(例如,我将一堆模板声明从 usingclass
更改为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)