Урок №7. Решения самых распространенных проблем

  Юрий  | 

    | 

  Обновл. 21 Фев 2019  | 

 31784

 ǀ   20 

В этом уроке мы рассмотрим наиболее частые проблемы, с которыми сталкиваются новички в C++.

Проблема №1

Как использовать русский язык в программах C++?

Ответ №1

Чтобы выводить кириллицу в C++ нужно подключить заголовочный файл Windows.h:

И прописать следующие две строчки в функции main():

Проблема №2


При выполнении программы появляется чёрное консольное окно, а затем сразу пропадает.

Ответ №2

Некоторые компиляторы (например, Bloodshed’s Dev C++) автоматически не задерживают консольное окно после того, как программа завершила своё выполнение. Если проблема в компиляторе, то следующие два шага решат эту проблему:

Во-первых, добавьте следующую строчку кода в верхнюю часть вашей программы:

Во-вторых, добавьте следующий код в конец функции main() (прямо перед оператором return):

Таким образом программа будет ожидать нажатия клавиши, чтобы закрыть консольное окно. Вы получите дополнительное время, чтобы хорошенько всё рассмотреть/изучить. После нажатия любой клавиши, консольное окно закроется.

Другие решения, такие как system("pause");, могут работать только на определённых операционных системах, поэтому вариант выше предпочтительнее.

Примечание: Visual Studio не задерживает консольное окно, если выполнение запущено с отладкой («Отладка» > «Начать отладку» или F5). Если вы хотите, чтобы была пауза — воспользуйтесь решением выше или запустите программу без отладки («Отладка» > «Запуск без отладки» или Ctrl+F5).

Проблема №3

При компиляции программы я получаю следующую ошибку:
«c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive».

Ответ №3

Эта ошибка свидетельствует о том, что вы забыли подключить предварительно скомпилированный заголовок pch.h. Для устранения этой проблемы, вам нужно просто добавить следующую строчку кода в самый верх программы:

Обратите внимание, в программах с несколькими файлами, каждый файл должен начинаться именно с этой строчки кода. В качестве альтернативы, вы можете просто отключить использование предварительно скомпилированных заголовков.

Проблема №4


При использовании cin, cout или endl компилятор говорит, что cin, cout или endl являются «undeclared identifier» (необъявленными идентификаторами).

Ответ №4

Во-первых, убедитесь, что у вас присутствует следующая строчка кода в верхней части вашей программы:

Во-вторых, убедитесь, что cin, cout или endl имеют префикс “std::”. Например:

Проблема №5

При использовании endl для перехода на новую строку, появляется ошибка, что end1 является «undeclared identifier».

Ответ №5

Убедитесь, что вы не спутали букву l (нижний регистр L) в endl с цифрой 1. В endl все символы являются буквами. Также легко можно спутать заглавную букву О с цифрой 0 (нуль).

Проблема №6


Моя программа компилируется, но работает не так как нужно. Что мне делать?

Ответ №6

Выполните отладку программу. Детальнее об этом в уроке №26 и уроке №27.

Проблема №7

Как включить нумерацию строк в Visual Studio?

Ответ №7

Перейдите в меню «Средства» > «Параметры»:

Затем откройте вкладку «Текстовый редактор» > «Все языки» > «Общие» и поставьте галочку возле «Номера строк», затем нажмите «ОК»:


Проблема №8

При компиляции программы я получаю следующую ошибку: «unresolved external symbol _main or _WinMain@16».

Ответ №8

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

Здесь есть несколько пунктов, которые нужно проверить:

   Есть ли в вашей программе функция main()?

   Слово main написано правильно?

   Подключен ли файл, который содержит функцию main(), к вашему проекту? (если нет, то переместите функцию main() в файл, который является частью вашего проекта, либо добавьте этот файл в ваш проект)

   Подключен ли файл, содержащий функцию main(), к компиляции?

Проблема №9

При компиляции программы я получаю следующее предупреждение: “Cannot find or open the PDB file”.

Ответ №9

Это не ошибка, а предупреждение. На работоспособность вашей программы оно не повлияет. Тем не менее, в Visual Studio вы можете решить всё следующим образом: перейдите в меню «Отладка» > «Параметры» > «Отладка» > «Символы» и поставьте галочку возле «Серверы символов (Майкрософт)», затем нажмите «ОК».

Проблема №10

Я использую Code::Blocks или G++, но функционал C++11/C++14 не работает.

Ответ №10

В Code::Blocks перейдите в «Project» > «Build options» > «Compiler settings» > «Compiler flags» и поставьте галочку возле пункта «Have g++ follow C++14 ISO C++ language standard». Смотрите урок № 4 — там есть скриншоты, как это сделать.

При компиляции в g++, добавьте следующий код в командную строку:

-std=c++14

Проблема №11

Я запустил программу, появилось консольное окно, но ничего не выводится.

Ответ №11

Ваш антивирус может блокировать выполнение вашей программы. Попробуйте отключить его на время и запустите программу ещё раз.

У меня есть другая проблема, с которой я не могу разобраться. Как и где я могу получить ответ?

По мере прохождения уроков, у вас, несомненно, появятся вопросы или вы столкнетесь с проблемами. Что делать?

Во-первых, спросите у Google. Четко сформулируйте вашу проблему и просто погуглите. Если у вас есть сообщение об ошибке — скопируйте его и вставьте в поиск Google, используя кавычки. Скорее всего, кто-то уже задал такой же вопрос, как у вас, и получил на него ответ.

Если Google не помог, то спросите на специализированных сервисах вопросов/ответов/форумов. Вот самые популярные из них:

   Stack Overflow

   CyberForum

   Toster

Но будьте внимательны и старайтесь максимально конкретизировать свою проблему, а также не забудьте указать, какую операционную систему и IDE вы используете, а также укажите, что вы пробовали сделать самостоятельно.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (223 оценок, среднее: 4,93 из 5)
Загрузка...

Комментариев: 20

  1. Аватар Александр:

    Добрый день!

    Подскажите, как быть. После CTRL+F9 проекта HelloWorld в Code::Blocks выдает сообщение:
    "Tried to run compiler executable 'C:\MinGW/bin/mingw32-gcc.exe', but failed!"

    1. Аватар Александр:

      Отвечу сам себе. Решил вопрос путём переустановки Windows с последующей установкой Visual Studio.

  2. Аватар Александр:

    Возможно ли сделать так, чтобы проблема 2 решалась, так чтобы после ввода любой клавиши для закрытия окна консоли не нужно было нажимать enter?

  3. Аватар nickatin:

    Вечер добрый, очень доступно все написано.
    По поводу — убедитесь, что cin, cout или endl имеют префикс “std::”.
    Не проще прописать перед main единожды строчку кода — using namespace std; или есть нюансы?

    1. Юрий Юрий:

      Привет. Можно прописать и using, но есть нюансы. Какие? Читайте урок №54.

  4. Аватар Анна:

    Спасибо за уроки, пока все получается и ошибок нет.

  5. Аватар Данила:

    как сделать так чтобы консоль не закрывалась любой клавишей а только крестиком?

  6. Аватар Денис:

    Я вот лично решил с юного возраста начать этим заниматься, и пока что не очень получается:)
    У меня выдается 458 ошибок при компиляции…Это нормально?…
    Или я не туда смотрю?…

    1. Аватар Руслан:

      да норм, если ты печатаешь большой код, это уже прогресс, я за 3тий день только hello world научился делать. Просто не здавайся и все получится)

  7. Аватар LiMon4к:

    Юрий что делать,пишу на русском в командной строке все буквы правильные,запускаю проект-там буквы русские, но другие совсем.

  8. Аватар Максим:

    Про end1 и endl. У меня целая история, 2 дня я сидел и пересматривал код. А вообще спасибо за статьи!

    1. Юрий Юрий:

      Эт да, кажется такие мелочи, а столько времени убивают.

  9. Аватар Анатолий:

    На другом ресурсе для кириллицы предлагают использовать setlocale(LC_ALL, "rus");,
    тут SetConsoleCP(1251); и SetConsoleOutputCP(1251);, в чем разница?

    1. Юрий Юрий:

      В

      вы устанавливаете использование локальных параметров (в этом случае, русских). В

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

      1. Аватар SGS:

        В CodeBlocks при указании

        и прописывании в main()

        все равно пишет кракозябры вместо русских слов.
        Хотя при добавлении строчки

        русский определяется.
        Что делаю не так?

        1. Юрий Юрий:

          Попробуйте изменить шрифт в консоли. По умолчанию в консоли стоит шрифт Consolas (у вас может быть другой) — он и может препятствовать корректному выводу/вводу кириллицы через SetConsole. Зайдите в консоль через cmd — ПКМ по верхней панели консоли — выберите «Свойства» — закладка «Шрифт» — установите в качестве шрифта Lucida Console — затем «ОК».

        2. Аватар SGS:

          Работает.
          Спасибо!

        3. Юрий Юрий:

          Пожалуйста 🙂

  10. Аватар Александр:

    Вы пишите в коде std :: cout<<, std :: cin >>.
    А можно написать using namespace std; и не писать по всему коду std ::
    Это зависит от привычки (инд. почерка) или есть какой то секрет ?
    Спасибо.
    P.S. Пришел к Вам с другого сайта, у Вас более доходчиво.

    1. Юрий Юрий:

      Можно, но есть нюансы. Об этом подробно в 54 уроке.

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *