C++技巧(warningC4786錯誤解決方法)

C++技巧(warningC4786錯誤解決方法),第1張

C++技巧(warningC4786錯誤解決方法),第2張

在使用std::vector的過程中,考試提示的編譯器報錯如下:
C:\ program files \ VC98 \ include \ vector(61):警告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:在瀏覽器信息中標識符被截斷爲“255”個字符
D:\ RTD \ rule loader \ treenode . h(15):請蓡見對正在編譯的類模板實例化“std::vector,class std::allocator >,Class STD::allocator D::char _ traits,Class:: allocator > >>”的引用
此警告的原因是標識符太長,超過了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 _ CLASS _ REALLY _ REALLY _ CLASS _ NAME
A _ REALLY _ LONG _ CLASS _ NAME
{
public:

int m _ data;
};
void main()
{
a _ really _ long _ class _ name test _ obj;
test _ obj . m _ data = 12;
}
如果類名超過255個字,使用時會報錯4786。在使用STL(C 標準模板庫)時,經常會産生類似的錯誤,特別是對於vector、map等模板類。如果不小心在模板裡設置了一個模板,那就太長了。示例:
template
classverylongclassname a { };
模板
類verlong class name b { };
template
class verlong class name c { };
模板
類very long class name { };
class SomeRandomClass { };
typedef verlong class named ClassD;
typedef verylongclassname c class c;
typedef verlong class name b class b;
typedef verlong class name a class a;
void SomeRandomFunction(class a AObj){ }
void main()
{
class a AObj;
SomeRandomFunction(AObj);
}
有兩種解決方案。一種是直接定義別名:
# ifdef _ debug
# define veryrongclassname a
# define veryrongclassname b
# endif
另一種是阻塞4786 warning:
br/]# pragma warning(disable:4786)
注意屏蔽語句必須放在報告錯誤的模板類的引用聲明(如#include)之前,否則仍然不會

位律師廻複

生活常識_百科知識_各類知識大全»C++技巧(warningC4786錯誤解決方法)

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情