help-gplusplus
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Grokking C++ errors


From: Roger Leigh
Subject: Grokking C++ errors
Date: Wed, 21 Dec 2005 18:57:36 +0000
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/21.4 (gnu/linux)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

The C++ Standard Library has a reputation for excessively long error
messages, but this is one of the best I've seen in a while:

sbuild-keyfile.cc: In member function 'sbuild::string_list 
sbuild::keyfile::get_keys(const std::string&) const':
sbuild-keyfile.cc:62: error: invalid conversion from 'const 
std::tr1::tuple<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::map<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::tr1::tuple<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass>, std::less<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > >, 
std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::tr1::tuple<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass> > > >, 
std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass>*' to 'std::tr1::tuple<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, 
std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> 
>, std::tr1::tuple<std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass>, std::less<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > >, 
std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, 
std::allocator<char> >, std::tr1::tuple<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass> > > >, 
std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass, std::tr1::_NullClass, std::tr1::_NullClass, 
std::tr1::_NullClass>*'
sbuild-keyfile.cc:65: error: 'item_map_types' was not declared in this scope
sbuild-keyfile.cc:65: error: 'items' was not declared in this scope

In this case, it's nothing but a missing "const":

  // key, value, comment
  typedef std::tr1::tuple<std::string,std::string,std::string> item_type;
  typedef std::map<std::string,item_type> item_map_type;

  // group, items, comment
  typedef std::tr1::tuple<std::string,item_map_type,std::string> group_type;
  typedef std::map<std::string,group_type> group_map_type;

  const keyfile::group_type *
  keyfile::find_group(const std::string& group) const;

  group_type *found_group = find_group(group);
  [should be "const group_type *".]

This made me wonder: why can't the compiler just use the typedef'd
names which are actually readable?  The above error is far less than
readable, and had the error not been trivial, it would have taken a
significant amount of head scratching before I found the problem.

Are there any tools around which can help with this?  What do other
folks do in the face of errors like this?


Regards,
Roger

- -- 
Roger Leigh
                Printing on GNU/Linux?  http://gimp-print.sourceforge.net/
                Debian GNU/Linux        http://www.debian.org/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8+ <http://mailcrypt.sourceforge.net/>

iD8DBQFDqaWcVcFcaSW/uEgRAnQXAJ9Z810ZqaG5LEHb86fWDPbPQ9fhPgCePrRD
frOxxT1nX2us43I5iWlHizA=
=dOfz
-----END PGP SIGNATURE-----


reply via email to

[Prev in Thread] Current Thread [Next in Thread]