Deciphering C++ template error messages

2019-01-11 01:14发布

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.

5条回答
姐就是有狂的资本
2楼-- · 2019-01-11 01:31

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
查看更多
仙女界的扛把子
3楼-- · 2019-01-11 01:34

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.

查看更多
ゆ 、 Hurt°
4楼-- · 2019-01-11 01:43

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 :-(

查看更多
\"骚年 ilove
5楼-- · 2019-01-11 01:47

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?).

查看更多
不美不萌又怎样
6楼-- · 2019-01-11 01:52

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

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

查看更多
登录 后发表回答