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 也已经有定义了
...全文
647 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;
}
  • 打赏
  • 举报
回复
给出的代码太少了
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

65,210

社区成员

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

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