VC.STL Newsgroup Good Questions(
三
)
声明
Container
对象时有许多
C 4786
编译警告,
Why?
Article last modified on 2002-5-29
----------------------------------------------------------------
The information in this article applies to:
-
Microsoft Visual C++, 32-bit Editions, version 6.0, SP5
----------------------------------------------------------------
Question:
下面的代码编译时报告了一大堆愚蠢的
C4786
编译警告,足有十四个:
f:\program files\microsoft visual studio\vc98\include\list(125) : warning C4786: '?$reverse_bidirectional_iterator@Viterator@?$list@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AAV43@PAV43@H' : identifier was truncated to '255' characters in the browser information E:\ \Exercise4\Exercise4.cpp(195) : see reference to class template instantiation 'std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >' being compiled
代码如下:
#include <string>
using namespace std;
list<string> myList;
void main()
{
}
再比如,
map<string,int> myMap
。
|
Answer:
这个警告的意思就是说,
list<string>
的构造生成的
Symbols
太长了,超过了255个字符。
你其实不用理会这个警告,因为它只会影响到
Debugger
,而不会影响到真实的代码。实际上,如果你编译一个
Release
版本的话,就会发现这个警告已经完全消失了。
消除这个警告可能有一点难度,因为这属于预处理器的行为。
一般建议你这么做:
#pragma warning(disable : 4786)
#include <list>
#include <string>
注意这个
pragma
声明一定要放在
stl
头文件之前!否则不起作用!
这个
pragma
也不是总能够发生效力的!有时候,并不能消除所有的这种
C4786
警告。
详情参见:
http://support.microsoft.com/support/kb/articles/Q167/3/55.ASP
微软声称,将在
Microsoft Visual C++ .NET
中解决这个问题。
|
(To be Continued)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12675