解密C++模板错误信息

问题描述:

我真的开始明白当人们说C++的错误信息在模板方面非常糟糕时,他们是什么意思。我已经看到很长的错误,像一个功能不符合其原型一样简单的事情。解密C++模板错误信息

解密这些错误有没有什么窍门?

编辑:我使用gcc和MSVC。他们似乎都非常可怕。

你可以试试下面的工具,使事情变得更加理智:

http://www.bdsoft.com/tools/stlfilt.html

一些编译器会给出比别人更好的消息。你使用什么编译器?话虽如此,他们都很糟糕。 C++ 0X将解决这个问题的大部分问题(见concepts),但该标准直到2009年才会发布,广泛的支持可能会比以前更晚:-(

+1

-1他们仍然是不可破译的;也许不像以前那样难以破译,但仍然很可怕! – 2013-04-12 18:50:07

+0

是的,我现在正在努力。他们很难用视觉来解析! – 2013-09-13 17:40:53

我确定地狱不行。小错误爆炸成不可读垃圾的页面和页面。通常在清晨,在咖啡之前。:(

我唯一的建议是深呼吸,从顶部开始,尝试解析重要的信息(我知道,说起来容易做起来难,对吧?)。

至少在Visual Studio中,有在输出生成窗口,而不是错误列表给出更多的信息。我已经在错误的模板错误列出状态,“无法转移ert Foo <int> to Foo <int>“。 Output窗口中的实际错误后面有几行帮助我解释了实际问题。

由于@nsanders表示STLFilt是一个很好的解决方案。一个自制的STLFilt(当你不想去安装Perl的麻烦时)是在编辑器中复制错误消息,并开始替换错误部分,直到它变得(更)可管理。

例如

s/std::basic_string<char,std::char_traits<char>,std::allocator<char>>/string/g 

在不太令人讨厌而言,这意味着:

替换:

std::basic_string<char,std::char_traits<char>,std::allocator<char>> 

有了:

string