Как можно обойти предупреждение 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
Другие вопросы по тегам