Как можно обойти предупреждение Visual C ++ 2005 «превышено длина украшенного имени, имя было усечено»? - PullRequest
13 голосов
/ 30 июля 2011

Например, скажем, по какой-то причине у меня был кусок кода, который выглядел так:

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 ]

15 голосов
/ 30 июля 2011

Если вы не хотите видеть предупреждение, вы должны либо отключить его, либо использовать более новый компилятор.

Предупреждение касается отладочной информации, которая ограничена 255 символами для имени типа. Пока эти 255 символов не идентичны для двух разных типов, все в порядке. И если они идентичны, вы ничего не можете с этим поделать!

Просто выключите его, пока не сможете обновить компилятор!

8 голосов
/ 30 июля 2011

Это не так уж и отличается от ошибки, которую я использовал в Visual C ++ 6 каждый раз, когда я делал что-либо с картами STL. Вам просто нужно прикусить пулю и сказать компилятору заткнуться об этом предупреждении. У него есть фундаментальное внутреннее ограничение на то, как долго может быть имя типа. На самом деле это довольно бесполезное предупреждение, просто жаловаться на ограничение внутреннего имени компилятора / отладчика.

#pragma warning(disable : 4503)

И если вы вообще думаете о переносе на другой компилятор, просто оберните его в #ifdef для Visaul C ++:

#ifdef MSVC
  #pragma warning(disable : 4503)
#endif
...