CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

我是按书(C++Primer 4E)上写的,极其简单,可是为什么总是报错呢呢?大家来帮忙看一下.

楼主wdy0725()2006-05-04 00:16:19 在 C/C++ / C语言 提问

程序很简单:  
  #include   <vector>  
  using   std::vector;  
  void   main()  
  {  
  vector<int>   ivec(10);  
  for(vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
  *iter=1;  
  }  
  编译后:  
   
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2653:   'vector<int,class   std::allocator<int>   >'   :   is   not   a   class   or   namespace   name  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2065:   'iterator'   :   undeclared   identifier  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'iter'  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2065:   'iter'   :   undeclared   identifier  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2440:   '='   :   cannot   convert   from   'int   *'   to   'int'  
                  This   conversion   requires   a   reinterpret_cast,   a   C-style   cast   or   function-style   cast  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2446:   '!='   :   no   conversion   from   'int   *'   to   'int'  
                  This   conversion   requires   a   reinterpret_cast,   a   C-style   cast   or   function-style   cast  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2040:   '!='   :   'int'   differs   in   levels   of   indirection   from   'int   *'  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2143:   syntax   error   :   missing   ')'   before   '++'  
  E:\My   Files\C++Primer\vector.cpp(6)   :   warning   C4552:   '!='   :   operator   has   no   effect;   expected   operator   with   side-effect  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2059:   syntax   error   :   ';'  
  E:\My   Files\C++Primer\vector.cpp(6)   :   error   C2059:   syntax   error   :   ')'  
  E:\My   Files\C++Primer\vector.cpp(7)   :   error   C2106:   '='   :   left   operand   must   be   l-value  
  Error   executing   cl.exe.  
   
  vector.obj   -   11   error(s),   1   warning(s)  
  问题点数:20、回复次数:48Top

1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-05-04 00:35:05 得分 0

你用的是什么编译器?Top

2 楼wdy0725()回复于 2006-05-04 00:43:23 得分 0

忘说编译器了.VC++6.0Top

3 楼Yellen1231()回复于 2006-05-04 01:20:27 得分 1

vector<int>::iterator  
  改成std::vector<int>::iteratorTop

4 楼UPCC(杂食动物)回复于 2006-05-04 01:26:07 得分 2

程序肯定没错,可能是编译器环境设置的问题,看看编译的默认路径有没有标准类库的路径先.Top

5 楼xombat(壞牧羊人)回复于 2006-05-04 13:05:06 得分 2

加using   namespace   std;试试!Top

6 楼DelphiNew(沙鼠)回复于 2006-05-04 13:20:59 得分 1

学习C++PRIMER的时候,你应该用一个对C++标准支持比较好的IDE。。  
  比如VC2003/VC2005,或者DEV-C++,如果在LINUX下的话就用K-DEVELOPTop

7 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-04 13:41:20 得分 0

我来跟!!!!!!!!!!!!  
  Top

8 楼san_126(阿三)回复于 2006-05-04 14:14:30 得分 1

加using   namespace   std;就可以了Top

9 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-04 14:34:39 得分 0

没有实践就没有发言权。。。。。。。  
  #include   <vector>  
  using   std::vector;Top

10 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-04 15:13:35 得分 5

using   namespace   std;  
    。。   确实需要。。。。  
  我加了  
  using   std::iterator;     就剩下8errors   and   0   warning了Top

11 楼whacking(小狂神)回复于 2006-05-04 15:13:54 得分 2

using   namespace   std     加了这个表明你头文件中不要加.h来结尾  
  你也同样可以把前面改成  
   
  #include   <vector.h>  
   
  这样也行Top

12 楼truelixin(虚幻的真实)回复于 2006-05-04 16:39:45 得分 0

#include   <iterator>  
  是不是也应该有这个头文件?Top

13 楼superskilledman()回复于 2006-05-04 16:48:05 得分 2

#include   <vector>  
  #include<iostream>  
  using   namespace   std;  
  void   main()  
  {  
  vector<int>   ivec(10);  
  for(vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
  *iter=1;  
  //Output   the   elements:  
  for(iter=ivec.begin();iter!=ivec.end();iter++)  
  cout<<*iter<<'\t';  
   
  }Top

14 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-05-04 16:51:17 得分 0

to   :   chenhu_doc(衣带渐宽终不悔   为伊消得人憔悴)  
   
  到底需不需要加呢?  
   
  你用的什么编译器试的?  
   
  我在gcc下只是有一个问题,   还跟楼主说的问题无关.  
  main.cpp:4:   error:   `main'   must   return   `int'  
  改掉后就OK了.  
   
   
  用Intel   C++   Compiler   9.0   编译通过.  
  Top

15 楼rickerliang(专回0分贴(来交流不是为分))回复于 2006-05-04 18:47:00 得分 0

vc6的东东仍到垃圾桶Top

16 楼longituder(大G)回复于 2006-05-04 19:06:40 得分 0

头文件改下试试  
  #include   <vector>  
  using   namespace   std;Top

17 楼liubingqian(海风)回复于 2006-05-05 08:08:00 得分 0

VC++   6不支持名字空间,所以namespace是无法使用的。去掉这些,改成#include   <xxx.h>,就是把文件名换成.h的形式。  
  还是建议换成对标准支持好的编译器,如新的Visual   Studio、Borland编译器、Dev-C++等。Top

18 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-05-05 09:10:58 得分 0

>>   VC++   6不支持名字空间,所以namespace是无法使用的。  
   
  这又是从哪听来的,   净瞎扯!!Top

19 楼pink_tulip(CSDN = ?)回复于 2006-05-05 09:42:43 得分 0

#include   <vector>  
  void   main()  
  {  
        std::vector<int>   ivec(10);  
        for(std::vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
        {  
                    *iter=1;  
        }  
  }  
   
   
  C++   primer   plus   5th推荐的写法。  
   
  Top

20 楼leolovefun()回复于 2006-05-05 09:43:39 得分 2

VC++6。0  
   
  #include   <vector>  
  using   std::vector;//改成using   namespace   std;  
  void   main()  
  {  
  vector<int>   ivec(10);  
  for(vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
  *iter=1;  
  }  
  Top

21 楼pink_tulip(CSDN = ?)回复于 2006-05-05 09:46:11 得分 2

改一下  
   
   
  #include   <vector>  
  int   main()  
  {  
        std::vector<int>   ivec(10);  
        for(std::vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
        {  
                    *iter=1;  
        }  
        return   0;  
  }Top

22 楼thomasway(远方的风)回复于 2006-05-05 10:18:57 得分 0

liubingqian(海风)   你是被海风吹晕头了吗?   有不支持名字空间的C++编译器吗,   给我找一个,   我倒想开开眼:DTop

23 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-05-05 10:20:40 得分 0

>>   有不支持名字空间的C++编译器吗,   给我找一个,   我倒想开开眼:D  
   
  多了,   TC3.0算不算一个编译器?   它不支持namespace  
  Top

24 楼thomasway(远方的风)回复于 2006-05-05 10:40:59 得分 0

学习了,   哈哈,   这么老的编译器,   你不说,   真的差点忘了.   刚才下了个来怀旧,   以前用iostream.h不觉得.Top

25 楼WilliamJ(威廉J)回复于 2006-05-05 10:42:20 得分 0

加using   namespace   std;   或写成:   std::vectorTop

26 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-05 12:48:49 得分 0

to   :   chenhu_doc(衣带渐宽终不悔   为伊消得人憔悴)  
   
  到底需不需要加呢?  
  你用的什么编译器试的?  
   
  我在gcc下只是有一个问题,   还跟楼主说的问题无关.  
  main.cpp:4:   error:   `main'   must   return   `int'  
  改掉后就OK了.  
   
       
  To:     xiaocai0001    
    1.   肯定是要加的,,(在这里问问小菜,如果不写using   namespace   std;那么要写哪几个不同的using   std::   ^^^)  
    2.   我用的是vc的编译器。。。  
   
   
  至于   杂食动物的::::::  
    ///程序肯定没错,可能是编译器环境设置的问题,看看编译的默认路径有没有标准类库的路径先.  
    我没有考虑。。。。。。。。。。。  
   
   
   
  再问问xiaocai   啊,   你觉得看c++   primer   的时候,用哪款编译器比较好,(最符合标准c++)  
                我知道现在还提用什么编译器的问题,肯定会招到bs的。。。。。但是人都是有欲望滴。。。  
  Top

27 楼nanhu_007(物是人非)回复于 2006-05-05 13:27:21 得分 0

VC++   6不支持名字空间,所以namespace是无法使用的。去掉这些,改成#include   <xxx.h>,就是把文件名换成.h的形式。  
  还是建议换成对标准支持好的编译器,如新的Visual   Studio、Borland编译器、Dev-C++等  
  ////////////////////////////////////  
  VC6.0是比较烂,但是名字空间还是支持的。Top

28 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-05 13:32:22 得分 0

在baidu上搜了一下,,  
   
  作为实事,没有哪一个编译器敢大言不惭地说自己100%支持C++标准,于是g++必然在其文档中谦虚地承认自己不是完全支持C++标准;  
   
  g++虽然不可能100%支持C++标准,但也接近圆满了。Top

29 楼fiftymetre(50米深蓝)回复于 2006-05-05 14:04:40 得分 0

又看到了不少,可笑的回复。。。。。。Top

30 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-05 14:07:36 得分 0

50米大姐:  
      不好意思呀!!!  
   
      本来是不想这样的。。。。。。Top

31 楼wanlyf()回复于 2006-05-05 15:02:43 得分 0

我用的是vc++6.0  
  加了using   namespace   std;后  
  测试没有错误  
  不信你可一试试Top

32 楼division(好风长吟)回复于 2006-05-05 17:51:21 得分 0

#include   <vector>  
  #include   <iostream>  
  using   namespace   std;  
  //using   std::vector;  
   
  void   main()    
  {  
  vector<int>   ivec(10);  
  for(vector<int>::iterator   iter=ivec.begin();iter!=ivec.end();++iter)  
  *iter   =   1;  
  for(iter=ivec.begin();iter!=ivec.end();iter++)  
          cout<<*iter<<'\t';  
   
  }  
  vc6下通过 using   namespace   std;这一句一定要加!Top

33 楼ariesjzj(ariesjzj)回复于 2006-05-05 20:43:04 得分 0

没加头文件Top

34 楼wdy0725()回复于 2006-05-06 17:14:06 得分 0

我是楼主,感谢各位在这里的指教.  
  经实践,加上   using   namespace   std;这一句是正确的.谢谢了.  
  另外还有一个问题:VC6下如何查询调试的结果,在不加函数的情况下.多谢!Top

35 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2006-05-06 20:48:25 得分 0

#define   swap(a,b)do{         \  
          int   temp;         \  
          temp=a; \  
          a=b; \  
          b=temp; \  
  }while(0)  
  作用:  
  1.防止命名污染:  
      inttemp;  
          othertype   a;  
          macro(a);  
          要是去掉do   while的,变成以下那样的话,容易则容易引起命名冲突  
        #define   swap(a,b)         \  
          int   temp;         \  
          temp=a; \  
          a=b; \  
          b=temp  
          当然你会说可以用以下方法避免命名冲突  
  #define   swap(a,b){         \  
          int   temp;         \  
          temp=a; \  
          a=b; \  
          b=temp; \  
  }  
  但是他有引起了以下的问题  
  2.if/else中的错误:  
          if(a>b)  
          swap(a,b);  
          else  
          a++;  
          在这里的话,就会出现编译错误,当然你在这里swap后面不用";"号  
  Top

36 楼wdy0725()回复于 2006-05-07 12:18:41 得分 0

楼上的好像是发错地方了.Top

37 楼vsong(房价越来越高,所以,好男人越来越少……)回复于 2006-05-07 13:43:25 得分 0

vc6很烂吗?不见得吧?Top

38 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2006-05-08 17:49:32 得分 0

很难想象在vector内定义的成员   vector   vector<int>::iterator   在   using   std::vector;   之后居然不可用,怪哉!vc6   用于   c++   编程不是烂,而是烂的不一般。你们这些只会用   vc6   的菜鸟则跟滥;你们这些连这个问题都存在疑虑的菜鸟滥的不行;这个白瓷楼主把   C++   的问题发到   C   板块了,滥不滥?拖了   9   May   了滥吗?  
   
  其实还有一滥,存在一个对于真正的编译器来说的真正的错误:  
   
  $   cat   test.cpp  
  #include   <vector>  
  using   std::vector;  
   
  //int   main()  
  void   main()  
  {  
                  vector<int>   ivec(10);  
   
                  for   (vector<int>::iterator   iter   =   ivec.begin();   iter   !=   ivec.end();   ++iter)  
                  {  
                                  *iter=1;  
                  }  
  }  
   
  $   g++   -W   -Wall   -std=c++98   -pedantic   test.cpp  
  test.cpp:6:   error:   `main'   must   return   `int'  
  test.cpp:6:   error:   return   type   for   `main'   changed   to   `int'  
  $Top

39 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2006-05-08 17:53:14 得分 0

fiftymetre(那些花儿.在我生命每个角落静静为我开着)   (   )   信誉:102     2006-5-5   14:04:40     得分:   0      
  〉        
  〉又看到了不少,可笑的回复。。。。。。  
   
   
  吹牛,我都还没有发言,哪里可能会有可笑的回复呢?Top

40 楼wdy0725()回复于 2006-05-08 23:04:26 得分 0

我是楼主,请不要激动.Top

41 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-05-08 23:16:51 得分 0

#include   <vector>  
  using   std::vector;  
   
  int   main()  
  {  
                  vector<int>   ivec(10);  
   
                  for   (vector<int>::iterator   iter   =   ivec.begin();   iter   !=   ivec.end();   ++iter)  
                  {  
                                  *iter=1;  
                  }  
                  getchar();  
                  return   0;  
  }  
  /////////在xiaocai0001为我推荐的devcpp里面能用。。。  
  Top

42 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2006-05-08 23:27:36 得分 0

>   wdy0725(利器善事)   (   )   信誉:100     2006-05-08   23:04:00     得分:   0      
  >    
  >       我是楼主,请不要激动.  
   
   
  我觉得你好笑   :(Top

43 楼chentaolimei(随心所欲而不逾矩)回复于 2006-05-09 01:40:38 得分 0

呵呵,MARK   UPTop

44 楼franson12()回复于 2006-05-09 11:29:34 得分 0

为什么加了using   namespace   std;就可以了?Top

45 楼DBRBZYY(不再犹豫)回复于 2006-05-09 15:54:15 得分 0

//加namespace  
  #include   <vector>  
  #include   <iostream>  
  #include   <iterator>  
  using   namespace   std;  
  void   main()  
  {  
   
    vector<int>   v(10);  
   
   
  vector<int>::iterator   iter   =   v.begin();  
  for(;iter!=v.end();++iter)  
   
  {  
  *iter=1;  
  cout<<*iter<<'   ';  
  }  
  cout<<endl;  
  }  
  //不加namespace  
  #include   <vector>  
  #include   <iostream>  
  #include   <iterator>  
  using   std::cout;  
  using   std::endl;  
   
  void   main()  
  {  
  std   ::   vector<int>   v(10);  
   
   
   
  std   ::   vector<int>::iterator   iter   =   v.begin();  
  for(;iter!=v.end();++iter)  
  {  
  *iter=1;  
  cout<<*iter<<'   ';  
  }  
  cout<<endl;  
  }Top

46 楼wdy0725()回复于 2006-05-09 22:29:58 得分 0

请尽情发言,说什么都可以,笑也好的.  
  :)  
  :)Top

47 楼LoveCreatesBeauty(lovecreatesbeauty.googlepages.com)回复于 2006-05-09 22:42:07 得分 0

>   wdy0725(利器善事)   (   )   信誉:100     2006-05-09   22:29:00     得分:   0      
  >    
  >       请尽情发言,说什么都可以,笑也好的.  
  >:)  
  >:)  
       
     
  好笑吗,我觉得一点都不好笑。Top

48 楼wdy0725()回复于 2006-05-10 22:47:51 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:wdy0725
  • Yellen1231
  • UPCC
  • xombat
  • DelphiNew
  • san_126
  • chenhu_doc
  • whacking
  • superskilledman
  • leolovefun
  • pink_tulip

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo