Ошибка Cygwin: система не объявлена в этой области?

0

В настоящее время я экспериментирую с 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> тоже верен.

  • 1
    Почему исключение #include <cstdlib> , которое, как вы уже видели, вызывает синтаксическую ошибку, является "правильным способом ее устранения"? Вам нужно либо #include <cstdlib> либо #include <stdlib.h> потому что именно здесь объявлена system функция.
  • 0
    Таким образом, ваш вопрос на самом деле два несвязанных вопроса. Почему?
Показать ещё 2 комментария
Теги:
cygwin

3 ответа

2
Лучший ответ

Если вам действительно нужно работать в обеих средах, вызовите system("cmd/C pause") вместо system("pause"). Это заставит оболочку Windows начать, а затем вызвать команду pause.

  • 0
    Спасибо! это сработало!
1

Ошибка заключается в том, что pause команда windows pause не найдена оболочкой cygwin, которая выполняется из вызова system(). Чтобы найти его, вам нужно добавить системный каталог Windows в PATH cygwin PATH.

Ваша вторая ошибка - ошибка компиляции самой программы, так как отсутствует #include <cstdlib (которая содержит объявление для std::system()).

1

system выполняет заданную ему команду, что означает, что она полностью зависит от платформы. pause - это команда Windows. Cygwin предоставляет Linux-подобную среду, в которой pause не является командой. Однако, если вы запускаете его из командной строки Cygwin, у вас не должно быть причин останавливаться или спать в конце main (и на самом деле вы не должны делать это в Windows либо - если вам нужно остановиться на конец, установить точку останова).

  • 0
    Test.exe, созданный Cygwin, закрывается немедленно. У меня есть другой способ остановить его, а именно: cout << "\ nНажмите любую клавишу и нажмите Enter, чтобы закончить ..."; сопровождаемый cin >> x; который работает. Установка точки останова в самой Visual Studio работает и отлично работает при запуске в Visual Studio. Но Test.exe, созданный Cygwin, все равно будет немедленно закрыт. :( Мне было интересно, почему системный метод не работает. Спасибо за ответ (:
  • 1
    @rockinfresh Как и должно быть. Программа всегда должна закрываться, когда это сделано. Лучше всего запустить вашу программу из командной строки cygwin, тогда она просто распечатает вывод на терминал, который вы можете продолжить читать даже после того, как это будет сделано.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню