C++头文件编译问题

   最近刚开始学习C++对头文件编译不是太清楚,运行程序总是出错。

  1.  1 #include "stdafx.h"  
     2 #include <iostream.h>                   
     3 int main(int argc, char* argv[])  
     4 {  
     5     float num1,num2,sum;                  
     6     cout<<"Please enter num1:"<<endl;     
     7     cin>>num1;                              
     8     cout<<"Please enter num2:"<<endl;     
     9     cin>>num2;                              
    10     sum=num1+num2;                        
    11     cout<<"The sum is:"<<sum<<endl;         
    12     cin>>sum;                              
    13     return 0;  
    14 }

     一运行出现这样的错误:fatal error C1083: 无法打开包括文件:“stdafx.h”: No such file or directory 生成失败。最后上网查了一下前人关于这个问题的解决办法点击打开链接,看了之后感觉不错,但是对于我这种菜鸟级别的理解还是有点难度,最后跟师兄弟讨论查找资料,发现#include "stdafx.h"和#include <iostream.h> 这个是老版本的格式,现在新版本为了和C语言区别开把.h后缀除掉(这一块建议新手查一下资料区别一下),最后的解决思路:把#include "stdafx.h"除掉,#include <iostream.h>改为#include<iostream>,然后在其后面添加using namespace std就ok了.
  现在说说关于using namespace std,下面是我查的关于它的一些介绍:
1)命名空间的意思
2)#include<iostream.h>等同于:#include<iostream> using namespace std;具体点:std::cout,std::endl;(在没有.h或者using namespace std情况下) cout,endl(在有.h或者using namespace std)
看到这大家对前面一个程序为什么这么改就有了答案。
下面说说带.h和不带有什么区别,例如<iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。