当人们说 C++ 的错误消息对于模板来说非常糟糕时,我真的开始理解他们的意思了。对于像函数与其原型不匹配这样简单的事情,我见过可怕的长错误。

有什么技巧可以破译这些错误吗?

编辑:我同时使用 gcc 和 MSVC。他们俩看起来都非常可怕。

有帮助吗?

解决方案

您可以尝试以下工具让事情变得更加理智:

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

其他提示

我绝对不能。小错误会爆炸成一页又一页的不可读的垃圾。通常是在清晨,喝咖啡之前。:(

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

作为 @恩桑德斯STL过滤器 是一个很好的解决方案。自制的 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

有些编译器比其他编译器提供更好的消息。你使用什么编译器?话虽如此,他们都非常糟糕。C++0X 将解决大部分这个问题(参见 概念),但该标准要到 2009 年才会发布,广泛的支持可能会更晚:-(

至少在 Visual Studio 中,“输出构建”窗口中提供了更多信息,而不是错误列表。我在错误列表状态中遇到了模板错误,“无法将 Foo<int> 转换为 Foo<int>”。输出窗口中实际错误后面有一些行帮助我破译实际问题是什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top