为什么g ++找不到iostream.h?

qua*_*els 19 c++ g++

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

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

我将这四个示例文件下载到他们自己的目录中.

  • main.cpp中
  • HELLO.CPP
  • factorial.cpp
  • functions.h

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

g++ main.cpp hello.cpp factorial.cpp -o hello
Run Code Online (Sandbox Code Playgroud)

当我从上面运行命令时,我从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.
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助.

Ada*_*eld 39

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

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

  • -1历史课是完全幻想 (4认同)
  • C++ 98没有`<iostream.h>`.C++标题名称的`.h`形式来自cfront,Glockenspiel C++,Comeau,Zortech和Borland的预标准时代.C++ 98标准删除了后缀并将所有名称放在命名空间`std`中.一些实现仍提供`.h`标头以实现向后兼容. (3认同)
  • 我认为这不值得投资.当然,你犯了一个错误,但每个人都这样做.你的其余答案是正确的,只因为你的历史已经关闭并不意味着我应该向你投票.它很容易修复. (3认同)

Che*_*Alf 14

<iostream.h> 从来没有成为标准的C++标题,因为它没有进入C++标准.

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

使用非标准的东西,比如<iostream.h>或者很好地避免使用教材void main.

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

#include <iostream.h>
Run Code Online (Sandbox Code Playgroud)

#include <iostream>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

它不能保证工作,但它可能会起作用.

  • 更好的解决方案(imho)是没有`using namespace std;`而是在标准名称前添加`std ::`. (4认同)