VC++ warning C4786 详解
来源:互联网 发布:淘宝宝贝长图要上几张 编辑:程序博客网 时间:2024/05/17 05:06
转自:
另一种是屏蔽4786warning:
http://blog.csdn.net/alvin969/article/details/3177100
在使用std::vector的过程中,编译器报了如下的warning:
c:/program files/vc98/include/vector(61) : warning C4786:'??0?$vector@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@@QAE@PBV?$basic_string@DU?$char_t
raits@D@std@@V?$allocator@D@2@@1@0ABV?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@1@@Z : identifier was truncated to '255' characters in the browser information
d:/rtd/ruleloader/treenode.h(15) : see reference to class template instantiation 'std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct st
d::char_traits<char>,class std::allocator<char> > > >' being compiled
raits@D@std@@V?$allocator@D@2@@1@0ABV?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@1@@Z : identifier was truncated to '255' characters in the browser information
d:/rtd/ruleloader/treenode.h(15) : see reference to class template instantiation 'std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct st
d::char_traits<char>,class std::allocator<char> > > >' being compiled
此warning产生的原因是因为标识符过长,超过了最大限定255个字。例如:
#define a_really_long_class_name a_really_really_really_really_really_really_really_ /
really_really_really_really_really_really_really_really_really_really_really_really_ /
really_really_really_really_really_really_really_really_really_really_really_really_really_really_really
class a_really_long_class_name
{
public:
a_really_long_class_name() {};
int m_data;
};
void main()
{
a_really_long_class_name test_obj;
test_obj.m_data = 12;
}
{
public:
a_really_long_class_name() {};
int m_data;
};
void main()
{
a_really_long_class_name test_obj;
test_obj.m_data = 12;
}
类名超过了255个字,使用时就会报4786的waring。在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就超长了。例如:
template <class A1, class A2, class A3, class A4>
class VeryLongClassNameA{};
template <class B1, class B2, class B3>
class VeryLongClassNameB{};
template <class C1, class C2>
class VeryLongClassNameC{};
template <class D1>
class VeryLongClassNameD{};
class SomeRandomClass{};
typedef VeryLongClassNameD<SomeRandomClass> ClassD ;
typedef VeryLongClassNameC<SomeRandomClass, ClassD> ClassC;
typedef VeryLongClassNameB<SomeRandomClass, ClassC, ClassD> ClassB;
typedef VeryLongClassNameA<SomeRandomClass, ClassB, ClassC, ClassD> ClassA;
void SomeRandomFunction(ClassA aobj){}
void main()
{
ClassA AObj ;
SomeRandomFunction(AObj) ;
}
class VeryLongClassNameA{};
template <class B1, class B2, class B3>
class VeryLongClassNameB{};
template <class C1, class C2>
class VeryLongClassNameC{};
template <class D1>
class VeryLongClassNameD{};
class SomeRandomClass{};
typedef VeryLongClassNameD<SomeRandomClass> ClassD ;
typedef VeryLongClassNameC<SomeRandomClass, ClassD> ClassC;
typedef VeryLongClassNameB<SomeRandomClass, ClassC, ClassD> ClassB;
typedef VeryLongClassNameA<SomeRandomClass, ClassB, ClassC, ClassD> ClassA;
void SomeRandomFunction(ClassA aobj){}
void main()
{
ClassA AObj ;
SomeRandomFunction(AObj) ;
}
解决方法有两种,一种是直接定义别名:
#ifdef _DEBUG
#define VeryLongClassNameA A
#define VeryLongClassNameB B
#endif
#define VeryLongClassNameA A
#define VeryLongClassNameB B
#endif
另一种是屏蔽4786warning:
#pragma warning(disable : 4786)
注意屏蔽语句必须放在报错的模板类的引用声明(如#include <vector>)之前,否则还是不起作用。
- VC++ warning C4786 详解
- VC++ warning C4786 详解
- VC++ warning C4786 详解 .
- VC++ warning C4786 详解
- VC++ warning C4786 详解
- VC++ warning C4786 详解
- warning C4786 详解(VC++6.0)
- warning C4786 详解(VC++6.0)
- warning C4786 详解
- 修正warning c4786
- 关于“warning C4786”
- 去掉warning C4786警告
- 关于“warning C4786”
- 去除VC6.0中使用STL时的warning C4786
- 如何去除VC6.0中使用STL时的warning C4786
- VC Warning 4116
- VC++ warning C4290
- vc6.0中warning C4786:identifier was truncated to '255' characters in the debug information的原因及解决办法
- oracle学习笔记二——用户管理
- 快速排序的改进算法
- 我的个人站——记录我学习的探索和疑惑
- 让Div内层将DIV外层撑开
- [Java] 一个关于i++ 的问题
- VC++ warning C4786 详解
- 是否怀念这些日子
- 让你的Emacs像vi一样高亮 “#if 0 ... #endif"
- 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- IT面试真经
- PHP中 Classes/Object 函数
- 你经历过吗?
- ASP.NET变量的作用域
- 《java编程思想》第一章 笔记