2010-05-15 2 views
3

Каковы наилучшие стратегии поиска недостающей точки с запятой, вызывающей ошибку? Существуют ли автоматические инструменты, которые могут помочь.Каков наиболее эффективный способ найти точки с запятой в VS с C++?

В настоящее время я использую Visual Studio 2008, но общие стратегии для любой среды были бы интересными и более полезными.

Фон: В настоящее время у меня есть особенно неуловимая точка с запятой (или скобка) в программе на С ++, которая вызывает ошибку C2143. Мои зависимости в файле заголовка довольно просты, но все же я не могу найти проблему. Вместо того, чтобы публиковать мой код и играть Где Wally (или Waldo, в зависимости от того, откуда вы) Я думал, что было бы более полезно получить некоторые хорошие стратегии, которые можно применить в этой и подобных ситуациях.

В качестве побочного вопроса: ошибка C2143 отображается в первой строке объявления первого метода (т. Е. Типа возвращаемого метода) в файле .cpp, который содержит только связанный с ним файл .h. Не приведет ли к этому поведению нечто иное, чем точки с запятой или фигурные скобки?

+0

напишите свой заголовок здесь. Вероятно, Майкл правильно описывает определение файла заголовка/класса. – Tim

+0

Как я это делаю, я использую редактор, такой как emacs, и автоматически загружаю весь файл и ищем, где отступы выходят в wack. Это самый быстрый способ для меня. Помните, что некоторые компиляторы, такие как visual studio, сообщают о недостающих полуколонах для других ошибок. Бог знает только почему. – Owl

ответ

1

Это вряд ли будет точкой с запятой, кроме (как предложил @Michael) из конца класса. Обычно недостающая точка с запятой вызывает ошибку в строке или двух.

Если это сфера скобка, то это, как правило, не слишком далеко, хотя иногда они могут быть очень далеко ..

Backtrack от линии ошибки (идти в обратном направлении до кода, а затем в обратном направлении через каждый включает из нижней), проверяя фигурные скобки. Скорее всего, это в начале вашего файла cpp непосредственно перед сайтом ошибки или в конце последнего включить, так что это лучшее место для начала.

Вы можете использовать различные методы:

  • Просто прочитать код. Если вы будете следовать чистому стилю симметричного кодирования, отсутствующая фигурная скобка часто ударит вас по лицу. (Вы можете использовать Edit-> Advanced-> Format Document, чтобы убрать код, если он находится в непоследовательном стиле).

  • Поместите курсор на каждый конец области видимости} и нажмите ctrl +}, чтобы переместить курсор к соответствующей фигурной скобке. Это либо ничего не сделает, и в этом случае нет совпадения, или вы перейдете на матч, и вы можете проверить, что это правильная фигурная скобка.

  • Если у вас есть много кода для рассмотрения, просто прокомментируйте его много с помощью #if FALSE. Вы получите разные ошибки компилятора, но если исходная ошибка остается, вы знаете, что это не вызвано прокомментированным кодом, и вы можете перейти к следующему include/class/block.

  • Худший вариант сценария заключается в том, что это некоторый код в макросе. Если вы добавили/отредактировали/использовали какие-либо макросы в последний день, то сначала проверьте их .

+0

Почему '# FALSE' был хорошим способом прокомментировать огромные блоки кода? –

+0

@ Kotti Использование стандартных/* */комментариев не будет работать, потому что первый */закрывающий тег в файле остановит комментарий. #if FALSE должен сообщать компилятору только включить код до следующего #endif, когда FALSE TRUE (т.е. никогда) –

+0

+1 для отличных советов с форматированием документов и поиска подходящих фигурных скобок. Я привык к Eclipse, который подчеркивает соответствие скобки, когда курсор находится рядом с фигурной скобкой и т. д. –

5

Вы забыли точку с запятой после определения класса в заголовке? Это довольно распространенная причина ошибок для первого метода в файле cpp. Я не думаю, что есть общая магия «найти недостающую точку с запятой»; VS пытается сделать обоснованное предположение, но если это не так, потому что код, который вы написали, несколько легален без него, даже если это не то, что вы намеревались

+1

Первое, что я проверил, это то, что все классы с заголовками имеют точки с запятой. Вероятно, у меня было бы это в качестве шага в моей стратегии в этом случае. –

3

Начните с строки, в которой компилятор сказал вам, что ошибка включена и выглядит в коде, непосредственно предшествующем этой строке.

+1

Смешно, что. Почему сообщения об ошибках не могут быть более умными? ';]' +1 –