我是按书(C++Primer 4E)上写的,极其简单,可是为什么总是报错呢呢?大家来帮忙看一下.
程序很简单:
#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




