首页 > 代码库 > C++头文件编译问题
C++头文件编译问题
最近刚开始学习C++对头文件编译不是太清楚,运行程序总是出错。
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。
C++头文件编译问题