map的迭代器的声明的奇怪问题

ziplj 2009-10-15 01:35:58
我在准备遍历map的时候 声明了一个迭代器

map<CString , PLACE_STATION* >::iterator it;// = m_Worksite.begin(); //这句编译错误
vector <CString>::iterator it; //这句无错

但是却出现编译错误

WorkSiteView.cpp
f:\My project\Outbar admin\WorkSiteView.cpp(115) : error C2039: “iterator” : 不是“std::map<_Kty,_Ty>”的成员
f:\My project\Outbar admin\WorkSiteView.cpp(115) : error C2955: “std::iterator” : 使用类模板需要模板参数列表
d:\Visual Studio 2003\Vc7\include\xutility(66) : 参见“std::iterator”的声明
f:\My project\Outbar admin\WorkSiteView.cpp(115) : error C2133: “it” : 未知的大小
f:\My project\Outbar admin\WorkSiteView.cpp(115) : error C2512: “std::iterator” : 没有合适的默认构造函数可用
f:\My project\Outbar admin\WorkSiteView.cpp(115) : error C2262: “it” : 不能被销毁
f:\My project\Outbar admin\WorkSiteView.cpp(116) : error C2371: “it” : 重定义;不同的基类型
f:\My project\Outbar admin\WorkSiteView.cpp(115) : 参见“it”的声明

不知道是什么原因 会出现这种编译错误 ? 前面已经#include<map> using namespace std;了
PLACE_STATION 也已经有定义了
...全文
531 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziplj 2009-10-16
  • 打赏
  • 举报
回复
算了 估计是编译器的事情

map<int, int >::iterator it;都编译不了
御用程序员 2009-10-15
  • 打赏
  • 举报
回复
PLACE_STATION 换别的类型尝试看看。
Happiness_q 2009-10-15
  • 打赏
  • 举报
回复
C++|bianee① 2637086
喜欢c++的朋友们进
我们都是新手希望共同进步
mengde007 2009-10-15
  • 打赏
  • 举报
回复
不给代码;怎么帮你调试呀;完整点吧;
chengzhe 2009-10-15
  • 打赏
  • 举报
回复
CString 类型有排序功能么? 就是重载了< 号了么
Jim_King_2000 2009-10-15
  • 打赏
  • 举报
回复
你能把CWorkSiteView类的代码贴全吗?
ziplj 2009-10-15
  • 打赏
  • 举报
回复
回楼上 还是不行

WorkSiteView.cpp
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2899: 不能在模板声明之外使用类型名称
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2039: “iterator” : 不是“std::map<_Kty,_Ty>”的成员
with
[
_Kty=CString,
_Ty=PLACE_STATION *
]
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2955: “std::iterator” : 使用类模板需要模板参数列表
d:\Visual Studio 2003\Vc7\include\xutility(66) : 参见“std::iterator”的声明
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2133: “m_it” : 未知的大小
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2512: “std::iterator” : 没有合适的默认构造函数可用
f:\My project\Outbar admin\WorkSiteView.cpp(117) : error C2262: “m_it” : 不能被销毁
Jim_King_2000 2009-10-15
  • 打赏
  • 举报
回复
如此看来,lz的代码应该在模板类的定义里面。

那么,map<CString , PLACE_STATION*>应该就是一个实参相依的类型。C++标准规定,对于实参相依的类型,其嵌入成员默认是变量或者函数,而非类型。如果其嵌入成员为类型的话,需要用typename显式指定。

typename map<CString, PLACE_STATION>::iterator it;

感兴趣的话,可以参考《C++ Templates》这本书。
ziplj 2009-10-15
  • 打赏
  • 举报
回复
代码都写了一大半了...公司的代码 不好给...
我后来算了 没用map了 增加了一个vector记录CString ...
mstlq 2009-10-15
  • 打赏
  • 举报
回复
vs2003……
楼主不妨将代码email我(mstlq@qq.com)……
现在机子跑测试程序中,我人还算空闲……
ziplj 2009-10-15
  • 打赏
  • 举报
回复
vs2003
变量名不同肯定不是关键
beyond071 2009-10-15
  • 打赏
  • 举报
回复
两个迭代器不能是同一个变量名。
不过前面的错误说明不清楚,不知道是哪里引起的,随便问一句楼主的编译器是?
ziplj 2009-10-15
  • 打赏
  • 举报
回复
仅仅只是一个声明而已都不行 去掉那一句以后 编译正常
yshuise 2009-10-15
  • 打赏
  • 举报
回复
不像有错。
ziplj 2009-10-15
  • 打赏
  • 举报
回复
少了一个星号 Copy代码的时候不小心
ziplj 2009-10-15
  • 打赏
  • 举报
回复
很简单的一段代码

//declare
private:
map<CString , PLACE_STATION* > m_Worksite; //


void CWorkSiteView::EmptyWorksiteView()
{
map <CString , PLACE_STATION >::iterator it;// = m_Worksite.begin();
vector <CString>::iterator it;
}
  • 打赏
  • 举报
回复
给出的代码太少了

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧