Я постоянно сталкиваюсь с внутренней ошибкой компилятора при попытке перейти с MSVC6 на MSVC 2008. После большой работы, закомментировав разные части программы, я отследил ошибку до двух строк кода в двух разных файлах CPP. , Оба эти файла CPP успешно компилируются, но каким-то образом влияют на то, проявляется ли ошибка в других файлах.
Обе эти строки включают создание нескольких сложных вложенных шаблонов. Они также являются единственными местами в приложении, которые используют абстрактный класс в качестве одного из параметров шаблона. Тем не менее, я не уверен, что проблема связана с абстрактными классами или шаблонами, это просто самая очевидная вещь, которую я заметил. Я даже не могу быть уверен, что эти строки значимы вообще. Вот как они выглядят:
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)