解密C ++模板错误消息

时间:2020-03-05 18:48:50  来源:igfitidea点击:

当人们说C ++的错误消息对于模板而言非常糟糕时,我真的开始理解人们的意思。对于像函数不匹配其原型这样的简单事件,我已经看到了可怕的长错误。

是否有任何技巧可以破译这些错误?

编辑:我同时使用gcc和MSVC。他们俩似乎都非常糟糕。

解决方案

回答

我们可以尝试使用以下工具使事情更加理智:

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

回答

一些编译器比其他编译器提供更好的消息。我们正在使用什么编译器?话虽如此,他们都非常糟糕。 C ++ 0X可以解决大多数问题(请参阅概念),但是该标准要到2009年才能发布,而广泛的支持可能要晚于:-(

回答

我肯定不会。小错误会爆炸成几页,成堆的页面变得不可读。通常在早上喝咖啡之前。 :(

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

回答

至少在Visual Studio中,"输出生成"窗口而不是"错误列表"中提供了更多信息。我在"错误列表"状态下遇到模板错误,"无法将Foo <int>转换为Foo <int>"。在"输出"窗口中的实际错误之后有几行内容,帮助我理解了实际​​的问题是什么。

回答

正如@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