我如何解决Visual C++ 2005的"超出装饰名称长度,名称被截断"警告?

Cas*_*ton 14 c++ warnings visual-studio-2005 visual-c++ name-decoration

例如,出于某种原因,我说有一段看起来像这样的代码:

mutable std::vector<std::vector<std::vector<std::vector<
std::vector<MyNamespace::MyType> > > > > myFreakingLongVectorThing;
Run Code Online (Sandbox Code Playgroud)

我收到的警告看起来像这样:

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>>>>>
    ]
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以重写那个怪异的长矢量的东西,以免得到那个警告?我仍然希望数据结构相同,但不要得到那个警告.我不想禁用警告.可能?

注意:这是Visual Studio 2005

....如果你真的很好奇为什么我正在使用这种可怕的数据结构,它是由自动生成的代码引起的.

Bo *_*son 16

如果您不想看到警告,则必须禁用它或使用更新的编译器.

警告是关于类型名称的调试信息限制为255个字符.只要这两个不同类型的255个字符不相同,您就可以了.如果它们完全相同,那么无论如何你都无法做很多事情!

只需将其关闭,直到您可以升级编译器!

  • 信不信由你,但是甚至从VS2015发出的这个警告也把我带到了这里:< (25认同)
  • 他们将它增加到4096但它仍然导致元编程问题,你可以从类型列表中构建类型列表.他们应该简单地使用变长字符串,为什么他们会使用这些限制?有一条规则,它被称为"零,一,无限".他们不尊重它. (6认同)
  • 我在VS 2010中遇到了这个问题.:( (5认同)
  • 继续成为VS2013 Nov CTP的问题:-( (5认同)
  • 在VS2017中同样的问题:( (4认同)
  • 通过VS 2012获取它:(.我想这不是他们的优先事项. (2认同)

小智 8

这与我以前在使用STL映射做任何事情时在Visual C++ 6中获得的错误没有什么不同.你只需要咬紧牙关并告诉编译器关闭那个警告.对类型名称的长度有一个基本的内部限制.实际上,这是一个非常无用的警告,只是抱怨编译器/调试器的内部名称限制.

#pragma warning(disable : 4503)
Run Code Online (Sandbox Code Playgroud)

如果您正在考虑移植到另一个编译器,只需将其包装在#ifdef中用于Visaul C++:

#ifdef MSVC
  #pragma warning(disable : 4503)
#endif
Run Code Online (Sandbox Code Playgroud)

  • 最好使用#ifdef _MSC_VER,因为这实际上是VC使用的预定义宏,而MSVC未预定义.请参阅https://msdn.microsoft.com/en-us/library/b0084kay.aspx (3认同)