22

我试图了解如何在 Ubuntu 上使用 g++ 和(最终)Clang 从命令行编译 C++ 程序。

我找到了一个解释 MakeFiles 的网页,我正在按照他们的指示进行操作。http://mrbook.org/tutorials/make/

我将四个示例文件下载到它们自己的目录中。

  • 主文件
  • 你好.cpp
  • 阶乘.cpp
  • 函数.h

然后我继续运行他们的示例,说明如何在没有 MakeFile 的情况下手动编译。

g++ main.cpp hello.cpp factorial.cpp -o hello

当我从上面运行命令时,我从 g++ 收到以下错误:

main.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.
hello.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.

我编写 c++ 的唯一经验是使用 IDE,例如 VS C++ Express 或 CodeBlocks。编译器不应该知道 iostream.h 是什么以及在哪里可以找到它吗?

我如何摆脱这个错误,以便程序可以编译?

谢谢你的帮助。

4

3 回答 3

43

在 C++ 语言被 ISO 标准化之前,头文件被命名为<iostream.h>,但是当 C++98 标准发布时,它被重命名为 just <iostream>(不带.h)。更改要使用的代码#include <iostream>,它应该可以编译。

您还需要向using namespace std;每个源文件添加一条语句(或在每个对 iostream 函数/对象的引用前加上std::说明符),因为在预标准化的 C++ 中不存在命名空间。C++98 将标准库函数和对象放在std命名空间内。

于 2012-10-27T18:51:24.527 回答
14

<iostream.h>从来都不是标准的 C++ 头文件,因为它没有成为 C++ 标准。

相反,我们<iostream>在 1998 年得到了 ,。

避免使用非标准材料(例如<iostream.h>或)的教材void main

但是,作为您当前预标准代码的实用解决方案,您可以尝试替换

#include <iostream.h>

#include <iostream>
using namespace std;

不能保证它会起作用,但很有可能它会起作用。

于 2012-10-27T19:06:43.633 回答
2

此处未提及的另一个相关问题(因此我将其包括在内以供任何人将来参考)是,编译器需要从命令行更新环境路径变量以查找 c++ 头文件的位置。在 Windows 中,您可以使用“高级系统属性”GUI 更新路径环境并添加 c++ 包含文件的位置。这将在重新启动 shell 时自动更新 Windows cmd 和 Cygwin 中的 PATH 环境变量。

要从 Linux 或 Cygwin shell 类型更新 PATH... PATH=$PATH:/your_path_here 示例:PATH=$PATH:/cygdrive/c/cygwin/lib/gcc/i686-pc-mingw32/4.7.3/include /c++ 同样添加包含目录也是一个好主意:PATH=$PATH:/cygdrive/c/cygwin/lib/gcc/i686-pc-mingw32/4.7.3/include/ ...或检查正确的安装的包含文件所在位置的目录,我建议安装 mingw 以与 Cygwin 一起使用,它是由 g++ 调用的。

要在 Cygwin 中安装其他所需的软件包,请重新运行 Cygwin 安装实用程序并检查从 Internet 安装以从 Web 存储库添加软件包并添加 mingw-gcc-g++ 和 mingw-binutils。编译: g++ hello.cpp -o hello

如果使用 gcc 实用程序而不是使用以下命令编译: gcc hello.cpp -o hello -lstdc++ ... 以获取您的可执行文件。

只要您安装了 gcc 或 mingw 并且 c++ 包含文件的路径在您的路径环境变量中,这些命令就可以工作。

于 2013-11-06T06:41:41.697 回答