解密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