Ответ 1
Вы можете попробовать следующий инструмент, чтобы сделать вещи более разумными:
Я действительно начинаю понимать, что люди имеют в виду, когда говорят, что сообщения об ошибках С++ довольно ужасны в отношении шаблонов. Я видел ужасно длинные ошибки для вещей так же просто, как функция, не соответствующая ее прототипу.
Существуют ли какие-либо трюки для расшифровки этих ошибок?
EDIT: Я использую gcc и MSVC. Они оба кажутся довольно ужасными.
Вы можете попробовать следующий инструмент, чтобы сделать вещи более разумными:
Я уверен, что черт возьми. Небольшие ошибки врываются на страницы и страницы нечитаемого мусора. Обычно рано утром, перед кофе.: (
Мой единственный совет - сделать глубокий вдох, начать сверху и попробовать и проанализировать важные фрагменты информации. (Я знаю, легче сказать, чем сделать, не так ли?).
Как @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
Некоторые компиляторы дают лучшие сообщения, чем другие. Какой компилятор вы используете? Сказав это, они все очень плохо. С++ 0X исправит большую часть этой проблемы (см. concepts), но стандарт не будет выпущен до 2009 года, а широкий поддержка, вероятно, будет еще позже: - (
По крайней мере, в Visual Studio в окне "Выходная сборка" больше информации, чем в списке ошибок. У меня была ошибка шаблона в состоянии "Список ошибок", "Невозможно преобразовать Foo <int> в Foo <int> ". Были некоторые строки, следующие за фактической ошибкой в окне вывода, которые помогли мне расшифровать, какова была фактическая проблема.