在C ++中没有.h的头文件

包含标准头文件(如iostream.h和fstream.h)时遇到问题。 在我的系统下,在usr/include/c++/4.3 ,没有任何文件具有“.h”扩展名(例如,它只是“iostream”而不是“iostream.h”)。 这将是罚款和丹迪,但我正在尝试使用另一个库,DCMTK,像#include<iostream.h> 。 不幸的是,在我的系统上没有“iostream.h”,只有“iostream”,这意味着我的编译器给我错误,如error: iostream.h: No such file or directory

我想我可以创build从iostream.h到iostream的软链接,但似乎它可能会创build,首先,麻烦在路上,其次,真的很烦人。 还有其他解决scheme吗?

为了完整性,我正在给这个东西编译的命令是
g++ -o gc_on_ctp -g -Wall -Idicom/include -Ldicom/lib gc_on_ctp.cpp -ldcmdata
可以想象,头文件位于dicom / include下,而库在dicom / lib下,名为libdcmdata.a。

谢谢!

我建议你在这里看看。 它解释了为什么当这个iostream.h / iostream诞生了,为什么它存在以及如何解决这些问题。

主要是iostream.h被认为是不可靠实施的具体和使用iostream代替那一个可以导致错误..

只要创建一个新的iostream.h文件,其中包含一行: #include <iostream> 。 这似乎是DCMTK的一大错误,因为标准是在这些文件名中不应该有.h。

这些标题已被弃用/标准。 在gcc上,我相信它们现在被定位为#include <backward/iostream.h>等。

另一方面,如果要链接的库需要标准库的较旧版本的不兼容版本,则可能会遇到更多问题。

我会修复(过时的)库。 您可以使用就地正则表达式搜索和替换来做到这一点:

 perl -e "s/iostream.h/iostream/g;" -pi $(find . -iname "*.cpp") 

要么

 find . -iname "*.cpp" -print0 | xargs -0 sed -i 's/iostream.h/iostream/g' 

注意:这样做的时候要小心,它会从你开始的路径递归地影响所有的文件。