Расшифровка сообщений об ошибках шаблона C ++ - PullRequest
26 голосов
/ 07 сентября 2008

Я действительно начинаю понимать, что люди имеют в виду, когда говорят, что сообщения об ошибках C ++ довольно ужасны в отношении шаблонов. Я видел ужасно длинные ошибки для таких простых вещей, как функция, не соответствующая ее прототипу.

Есть ли уловки для расшифровки этих ошибок?

РЕДАКТИРОВАТЬ: я использую и GCC и MSVC. Они оба кажутся довольно ужасными.

Ответы [ 5 ]

16 голосов
/ 07 сентября 2008

Вы можете попробовать следующий инструмент, чтобы сделать вещи более разумными:

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

8 голосов
/ 07 сентября 2008

Я чертовски уверен, что не могу. Небольшие ошибки взрываются на страницы и страницы нечитаемого мусора. Обычно рано утром, перед кофе. (

Мой единственный совет - сделать глубокий вдох, начать сверху и попытаться разобрать важные фрагменты информации. (Я знаю, легче сказать, чем сделать, верно?).

4 голосов
/ 07 сентября 2008

Как сказал @ nsanders STLFilt - хорошее решение. Доморощенный STLFilt (когда вы не хотите заниматься установкой Perl) должен скопировать сообщение об ошибке в редакторе и начать заменять части ошибки, пока она не станет (более) управляемой.

, например

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

В менее отвратительных терминах это означает:

Заменить:

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

С:

string
3 голосов
/ 07 сентября 2008

Некоторые компиляторы выдают лучшие сообщения, чем другие. Какой компилятор вы используете? Сказав это, они все довольно плохо. C ++ 0X решит большую часть этой проблемы (см. концепции ), но стандарт не будет выпущен до 2009 года, и широкая поддержка, вероятно, будет даже позже: - (

2 голосов
/ 07 сентября 2008

По крайней мере, в Visual Studio больше информации дается в окне «Построение вывода», а не в списке ошибок. У меня была ошибка шаблона в состоянии списка ошибок: «Не удалось преобразовать Foo в Foo ». В окне «Вывод» было несколько строк, следующих за фактической ошибкой, которые помогли мне понять, в чем заключалась настоящая проблема.

...