STLFilt使STL出错消息更易于理解

ZDNet软件频道 时间:2003-05-13 作者:翻译:Java研究组织-郭晓刚 |  我要评论()
本文关键词:cpptips
STLFilt是一个C++的STL出错消息澄清器(decryptor),这个工具通过把错误消息缩短来解决上面讨论的问题,从而帮助你理解起来更容易一些。
本文译自Builder.com,未经许可请勿转载在编程的时候,你不可避免会遇到编译时错误。通常这些错误都不是什么大问题,可以很容易就解决了。但是,当这些错误跟STL模版有关时,出错消息会变得非常隐晦。

在一些开发平台上,你会得到超过4,000个字符的错误消息。更遭的是,有时候这些消息没有提示错误的来源。

STLFilt是一个C++的STL出错消息澄清器(decryptor),这个工具通过把错误消息缩短来解决上面讨论的问题,从而帮助你理解起来更容易一些。

要使用这个工具,你要给你的系统安装一个Perl解释器。

STLFilt适用于:

  • Microsoft Visual C++ 6
  • Microsoft Visual C++ 7
  • Comeau C++
  • gcc 2.9x
  • gcc 3.x
  • Metrowerk CodeWarrior Pro 7
  • Metrowerk CodeWarrior Pro 8

下面的简单例子用来产生一个错误:

#include <map>
#include <utility>

int main()
{
    using namespace std;
    typedef map<int, double> valmap;
    valmap m;
    // 这里本来应该是:
    // m.insert( std::make_pair( 1, 2.0));
    m.insert(1,2.0);
    return 0;
}

没安装STLFilt前,Microsoft Visual C++ 6产生下面的出错消息:

error C2664: 'class std::_Tree<int,struct std::pair<int const ,double>,struct std::map<int,double,struct std::less<int>,class std::allocator<double> >::_Kfn,struct std::less<int>,class std::allocator<double> >::iterator __thiscall std::map<int,double,struct std::less<int>,class std::allocator<double> >::insert(class std::_Tree<int,struct std::pair<int const ,double>,struct std::map<int,double,struct std::less<int>,class std::allocator<double> >::_Kfn,struct std::less<int>,class std::allocator<double> >::iterator,const struct std::pair<int const ,double> &)' : cannot convert parameter 1 from 'const int' to 'class std::_Tree<int,struct std::pair<int const ,double>,struct std::map<int,double,struct std::less<int>,class std::allocator<double> >::_Kfn,struct std::less<int>,class std::allocator<double> >::iterator'
        No constructor could take the source type, or constructor overload resolution was ambiguous

安装STLFilt后,出错消息以一种更易于处理的形式出现:

error C2664: 'map<int,double>::iter map<int,double>::insert(map<int,double>::iter,const pair<int,double> &)': cannot convert parameter 1 from 'const int' to 'map<int,double>::iter'
        No constructor could take the source type, or constructor overload resolution was ambiguous



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134