Я постоянно сталкиваюсь с внутренней ошибкой компилятора при попытке перейти с 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? Ошибка в компиляторе, даже если что-то не так с вашим кодом, так что вы в пределах своих прав для этого. И вообще, их команда-компилятор, вероятно, будет иметь наилучшее представление о том, в чем проблема. –
@David: мы еще не отправили сообщение об ошибке в MS. Посмотрев на другие отчеты об ошибках, похожие на наши (в этом файле p2symtab.c, по-видимому, много ошибок), они отказываются от отчета об ошибке, который не содержит сценарий воспроизведения. Мои попытки сократить нашу ошибку до простого сценария воспроизведения потерпели неудачу. – rmeador