views:

904

answers:

5

I'm really beginning to understand what people mean when they say that C++'s error messages are pretty terrible in regards to templates. I've seen horrendously long errors for things as simple as a function not matching its prototype.

Are there any tricks to deciphering these errors?

EDIT: I'm using both gcc and MSVC. They both seem to be pretty terrible.

+11  A: 

You can try the following tool to make things more sane:

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

nsanders
+4  A: 

Some compilers give better messages than others. What compiler are you using? Having said that, they are all pretty bad. C++0X will fix most of this problem (see concepts), but the standard won't be released until 2009, and broad support will probably be even later than that :-(

Leon Timmermans
+3  A: 

I sure as hell can't. Small errors explode into pages and pages of unreadable junk. Usually early in the morning, before coffee. :(

My only advice is to take a deep breath, start at the top and try and parse the important pieces of information. (I know, easier said than done, right?).

Bernard
+1  A: 

At least in Visual Studio, there is more information given in the Output Build window rather than the Error List. I've had a template error in the Error List state, "Cannot convert Foo<int> to Foo<int>". There were some lines following the actual error in the Output window that helped me to decipher what the actual problem was.

Andy
+3  A: 

As @nsanders said STLFilt is a good solution. A home grown STLFilt (when you don't want to go to the trouble of installing Perl) is to copy the error message in an editor and start replacing parts of the error until it becomes (more) manageable.

e.g.

s/std::basic_string<char,std::char_traits<char>,std::allocator<char>>/string/g

In less geeky terms this means:

Replace:

std::basic_string<char,std::char_traits<char>,std::allocator<char>>

With:

string
Motti