[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-----
- Grokking C++ errors,
Roger Leigh <=