vc++中的cin和cout问题

来源:互联网 发布:linux centos ubuntu 编辑:程序博客网 时间:2024/04/27 22:08

           今天写程序遇到了一个奇怪的问题,编译出错报告是:“error C2065: 'cout' : undeclared identifier”和“error C2065: 'cin' : undeclared identifier”,并且错误出在Search.h头文件里的一个函数中。

          首先我怀疑是调入头文件的问题,于是仔细检查了头文件,我的头文件是
      #include "SearchStruct.h"
      #include "Search.h"

      #include <stdlib.h>

      #include <iostream.h>

感觉是对的, 包含了#include <iostream.h>呀,怎么会报错呀?于是上网搜资料,发现说是namespace问题,先现将namespace介绍如下:

       名字空间,  
  提供名字空间是防止名字空间污染问题,具体格式:  
  namespace   namespace_name{  
  string   str;  
  void   print(){...};  
  //设定一些成员,可以是数据成员或者是函数成员  
  };  
  在外面的函数,或者是类想访问namespace_name的成员必须加"namespace_name::"比如:"namespace_name::"str"  
  这样就可以访问了,若没有"namespace_name::"就是错误的,  
  或者可以写using   namespace   namespace_name;就可以直接使用了如:str  
  名字空间就是防止重复的一种机制

 

   如果写上using   namespace   std;头文件就不用带.h   如果不用using   namespace   std;头文件就要写上.h。原因:传统的指令应该是:#include<iostream.h>,在.net中少了.h后缀变为#include<iostream>使有。造成这种差异的原因是,visual   c++.net   2003删除了旧的iostream库,因而不能再用原来的include指令调用iostream库,但是std命名空间里仍有c++标准库的定义,其中当然包括iostream库,不过std里定义的c++标准库对应的头文件没有.h后,如原来的iostream.h变为iostream原来的string.h变为string,因此预处理命令相应的也没有了.h后缀。  
  在6.0里面使用using   namespace   std;道理是一样的 

 

可以有两种解决方法:(1)加入预编译的 using namespace std;

                              (2)不加using namespace std;但将cout cin写成std::cin>>i;问题就解决了。

 

   照这样我的程序就没错呀,我又试着改成  :#include<iostream>,并在其后加上using   namespace   std,结果还是报错。最后突然发现原来是自己没注意头文件的调用顺序,VC中编译文件是按顺序的即写在前面得先编译。于是调用头文件改为

      #include <iostream.h>

      #include "SearchStruct.h"
      #include "Search.h"

      #include <stdlib.h>

哈,问题终于解决了!