Расшифровка сообщений об ошибках шаблона C++
-
09-06-2019 - |
Вопрос
Я действительно начинаю понимать, что люди имеют в виду, когда говорят, что сообщения об ошибках C++ довольно ужасны в отношении шаблонов.Я видел ужасно длинные ошибки для таких простых вещей, как функция, не соответствующая своему прототипу.
Есть ли какие-нибудь хитрости по расшифровке этих ошибок?
РЕДАКТИРОВАТЬ:Я использую как gcc, так и MSVC.Они оба кажутся довольно ужасными.
Решение
Вы можете попробовать следующий инструмент, чтобы сделать ситуацию более разумной:
Другие советы
Я чертовски уверен, что не могу.Маленькие ошибки превращаются в страницы и страницы нечитаемого мусора.Обычно рано утром, перед кофе.:(
Мой единственный совет — сделайте глубокий вдох, начните сверху и попытайтесь проанализировать важную информацию.(Я знаю, легче сказать, чем сделать, правда?).
Как @Нсандерс сказал СТЛФилт это хорошее решение.Самодельный 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
Некоторые компиляторы дают лучшие сообщения, чем другие.Какой компилятор вы используете?При этом они все довольно плохие.C++0X решит большую часть этой проблемы (см. концепции), но стандарт выйдет не раньше 2009 года, а широкая поддержка, вероятно, будет даже позже :-(
По крайней мере, в Visual Studio больше информации отображается в окне «Сборка вывода», а не в списке ошибок.У меня возникла ошибка шаблона в состоянии списка ошибок: «Невозможно преобразовать Foo<int> в Foo<int>».После фактической ошибки в окне вывода было несколько строк, которые помогли мне понять, в чем заключалась реальная проблема.