Cygwin错误:系统未在此范围内声明?

时间:2013-12-26 15:38:18

标签: c++ bash cygwin

我目前正在尝试使用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>是否也正确。

3 个答案:

答案 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()的声明)。