Подтвердить что ты не робот

Расшифровка сообщений об ошибках шаблона С++

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

Существуют ли какие-либо трюки для расшифровки этих ошибок?

EDIT: Я использую gcc и MSVC. Они оба кажутся довольно ужасными.

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Как @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

Ответ 4

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

Ответ 5

По крайней мере, в Visual Studio в окне "Выходная сборка" больше информации, чем в списке ошибок. У меня была ошибка шаблона в состоянии "Список ошибок", "Невозможно преобразовать Foo <int> в Foo <int> ". Были некоторые строки, следующие за фактической ошибкой в ​​окне вывода, которые помогли мне расшифровать, какова была фактическая проблема.