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

   ⁄ 

 Обновлено 17 Апр 2017

  ⁄   

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


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

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

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

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

Здесь мы указали программе ждать нажатия клавиши. Таким образом, у вас будет время рассмотреть или изучить результат, прежде чем компилятор закроет консольное окно (чёрный экран).

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

Примечание: Visual Studio не будет останавливаться в конце работы консольного приложения, если оно запускается с отладкой (Debug Menu > Start Debugging). Если вы хотите, чтобы была пауза — воспользуйтесь решением выше, либо запустите программу без отладки (Debug Menu > Start Without Debugging).


Проблема 2: При компиляции в Microsoft Visual C++ я получаю ошибку:
«c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive»

Ответ 2: Эта ошибка появляется в случаях, когда компилятор Microsoft Visual C++ настроен на использование предварительно откомпилированных заголовков (precompiled headers), но один (или более) файлов кода C++ не включают в первой строке заголовок stdafx. Чтобы устранить эту проблему, просто найдите файл, в котором есть эта ошибка и добавьте следующую строку на место первой в вашем коде:

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

В качестве альтернативы, вы можете просто отключить precompiled headers.


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

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

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


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

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


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

Ответ 5: Cделайте отладку программу, подебажьте 🙂


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

Ответ 6: Перейдите в меню Tools и выберите Options. Дальше выберите Text Editor > All Languages (или C / C ++) и поставьте флажок возле Line numbers. Затем ОК.


Проблема 7: При компиляции программы в Visual Studio 2010, я получаю ошибку, что файл COFF недействительный.

Ответ 7: Если вы видите следующую ошибку при компиляции в Visual Studio 2010:

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

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

Самое лучшее решение – скачать и установить Visual Studio 2010 Service Pack 1.

Если это не поможет, то другие решения вы можете найти здесь.


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

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

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

а) есть ли в вашем коде функция main()?

б) функция main() написана правильно?

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

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


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

Ответ 9: Это не ошибка, а предупреждение, на работоспособность вашей программы оно не повлияет. Тем не менее, это может раздражать. Решение: перейдите в меню Debug > Options > Debugging > Symbols и поставьте галочку возле Microsoft Symbol Server.


Проблема 10: Я использую Code::Blocks или G++ в командной строке и ни одна из функциональных возможностей C++ 11 не работает

Ответ 10: Для Code::Blocks, перейдите в Project > Build options > Compiler settings > Compiler flags и поставьте галочку возле пункта Have g++ follow C++11 ISO C++ language standard.

Смотрите урок 4. Там есть скриншоты, как это сделать.

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

-std=c++11


Проблема 11: Я использую Visual Studio и получил следующую ошибку: «1>MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ)»

Ответ 11: Скорее всего, вы выбрали неверный тип проекта. Убедитесь, что вы создали консольное приложение — Win32 Console Application, а не проект — Win32 Project.


Проблема 12: Я запустил программу, появилось окно, но нет результата.

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


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

Ответ: По мере прохождения уроков, у вас, несомненно, появятся вопросы или вы столкнетесь с неожиданными проблемами. StackOverflow.com – это самое лучшее место, где вы сможете получить ответ или решение на ваш вопрос или проблему, связанную с программированием вообще. Будьте внимательны и старайтесь максимально конкретизировать проблему, а также не забудьте указать, какую ОС и IDE вы используете.

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

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (26 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

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

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