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个字符不相同,您就可以了.如果它们完全相同,那么无论如何你都无法做很多事情!
只需将其关闭,直到您可以升级编译器!
小智 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)