В настоящее время я экспериментирую с Cygwin, но сейчас начал это делать, когда столкнулся с этой проблемой.
Это мой код MSVS 2010 C++ для тестирования:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
system("pause");
return 0;
}
Компиляция и запуск его на Visual Studio сама по себе выполняется отлично. Однако в Cygwin bash после ввода следующей команды:
$ g++ -Wall -g -o Test.exe main.cpp
Когда я запускаю Test.exe
, консоль закрывается почти сразу и под линией Hello World, она говорит что-то вроде:
sh:pause: command not found.
Это немного сложно увидеть, так как он закрывается так быстро. Кто-нибудь знает почему?
Не уверен, что это связано, но когда
#include <cstdlib>
исключается, ошибка в cygwin bash будет:
$ g++ -Wall -g -o Test.exe main.cpp
main.cpp: In function 'int main()':
main.cpp:10:18: error: 'system' was not declared in this scope
system("pause");
^
Это правильный способ решить эту ошибку? Документации и руководства по Cygwin трудно найти, поэтому я не совсем уверен, что #include <cstdlib>
тоже верен.
Если вам действительно нужно работать в обеих средах, вызовите system("cmd/C pause")
вместо system("pause")
. Это заставит оболочку Windows начать, а затем вызвать команду pause.
Ошибка заключается в том, что pause
команда windows pause
не найдена оболочкой cygwin, которая выполняется из вызова system()
. Чтобы найти его, вам нужно добавить системный каталог Windows в PATH
cygwin PATH
.
Ваша вторая ошибка - ошибка компиляции самой программы, так как отсутствует #include <cstdlib
(которая содержит объявление для std::system()
).
system
выполняет заданную ему команду, что означает, что она полностью зависит от платформы. pause
- это команда Windows. Cygwin предоставляет Linux-подобную среду, в которой pause
не является командой. Однако, если вы запускаете его из командной строки Cygwin, у вас не должно быть причин останавливаться или спать в конце main
(и на самом деле вы не должны делать это в Windows либо - если вам нужно остановиться на конец, установить точку останова).
#include <cstdlib>
, которое, как вы уже видели, вызывает синтаксическую ошибку, является "правильным способом ее устранения"? Вам нужно либо#include <cstdlib>
либо#include <stdlib.h>
потому что именно здесь объявленаsystem
функция.