2008-09-07 1 views
25

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

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

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

ответ

3

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

+1

-1 Они все еще расшифровке; возможно, не так, как раньше, но все еще ужасно! – 2013-04-12 18:50:07

+0

Да, я сейчас борюсь с этим. Они так просто разобрать визуально! – 2013-09-13 17:40:53

8

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

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

2

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

4

Как @nsandersSTLFilt - хорошее решение. Домашний 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 
Смежные вопросы