我目前正在尝试使用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>
是否也正确。
答案 0 :(得分:2)
如果确实需要它在两个环境中都有效,请拨打system("cmd /C pause")
而不是system("pause")
。这将强制Windows shell启动,然后调用它的pause命令。
答案 1 :(得分:1)
system
运行给它的命令,这意味着它完全依赖于平台。 pause
是Windows命令。 Cygwin提供类似Linux的环境,其中pause
不是命令。但是,如果你从Cygwin命令行运行它,你应该没有理由在main
结束时暂停或休眠(事实上,你不应该在Windows中真正执行它 - 如果你需要在结束时停止,设置一个断点)。
答案 2 :(得分:1)
错误是从pause
调用执行的cygwin shell找不到类似于Windows system()
命令的命令。要找到它,你需要将windows系统目录添加到cygwin的PATH
变量。
您的第二个错误是程序本身的编译错误,因为缺少#include <cstdlib
(其中包含std::system()
的声明)。