Как можно обойти предупреждение Visual C++ 2005 "превышено длина украшенного имени, имя было усечено"?
Например, скажем, по какой-то причине у меня был кусок кода, который выглядел так:
mutable std::vector<std::vector<std::vector<std::vector<
std::vector<MyNamespace::MyType> > > > > myFreakingLongVectorThing;
и я получаю предупреждение, которое выглядит так:
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring(1665) : warning
C4503: 'std::vector<_Ty>::operator []' : decorated name length exceeded, name was truncated
with
[
_Ty=std::vector<std::vector<std::vector<std::vector<std::vector<MyNamespace::MyType>>>>>
]
Есть ли способ, которым я мог бы переписать эту чертову длинную векторную вещь, чтобы не получить это предупреждение? Я все еще хочу, чтобы структура данных была такой же, но не получаю это предупреждение. Я не хочу отключать предупреждение. Возможный?
Примечание. Это Visual Studio 2005.
.... если вам действительно интересно, почему я работаю с такой отвратительной структурой данных, это вызвано автоматически сгенерированным кодом.
2 ответа
Если вы не хотите видеть предупреждение, вы должны либо отключить его, либо использовать более новый компилятор.
Предупреждение о том, что отладочная информация ограничена 255 символами для имени типа. Пока эти 255 символов не идентичны для двух разных типов, все в порядке. И если они идентичны, вы ничего не можете с этим поделать!
Просто выключите его, пока не сможете обновить компилятор!
Это не сильно отличается от ошибки, которую я получал в Visual C++ 6 каждый раз, когда я делал что-либо с картами STL. Вам просто нужно прикусить пулю и сказать компилятору заткнуться об этом предупреждении. У него есть фундаментальное внутреннее ограничение на длину имени типа. На самом деле это довольно бесполезное предупреждение, просто жаловаться на ограничение внутреннего имени компилятора / отладчика.
#pragma warning(disable : 4503)
И если вы вообще задумываетесь о переносе на другой компилятор, просто оберните его в #ifdef для Visaul C++:
#ifdef MSVC
#pragma warning(disable : 4503)
#endif