免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4206 | 回复: 6
打印 上一主题 下一主题

用迭代器循环取值,报了error C2143,请STL高手看一下。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-06 23:45 |只看该作者 |倒序浏览
int main(int argc,char* argv[])
{
        std::map<int, int> mapA;
        mapA[1] = 11;
        mapA[2] = 22;
        MAPA::iterator itMapA = mapA.begin();     <---------------这一行报错
        for (itMapA != mapA.end();++itMapA)
        {
                std::cout << itMapA->first << std::endl;
                std::cout << itMapA->second << std::endl;
        }
           int i;
        std::cin >> i;
        return EXIT_SUCCESS;
}

------ 已启动生成: 项目: TestProject, 配置: Release Win32 ------
正在编译...
main.cpp
.\main.cpp(45) : error C2143: 语法错误 : 缺少“;”(在“)”的前面)
.\main.cpp(45) : error C2451: “std::_Tree<_Traits>::iterator”类型的条件表达式是非法的
        with
        [
            _Traits=std::_Tmap_traits<int,int,std::less<int>,std::allocator<std::pair<const int,int>>,false>
        ]
        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
正在创建浏览信息文件...
Microsoft ?????????? Version 8.00.50727
Copyright (C) Microsoft Corporation. All rights reserved.
生成日志保存在“file://e:\练习\C++\TestProject\Release\BuildLog.htm”
TestProject - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========


将程序修改如下,编译就OK了:
int main(int argc,char* argv[])
{
        std::map<int,int> mapA;
        mapA[1] = 11;
        mapA[2] = 22;
        for (MAPA::iterator itMapA = mapA.begin();itMapA != mapA.end();++itMapA)   <-------修改为这样程序编译就OK了
        {
                std::cout << itMapA->first << std::endl;
                std::cout << itMapA->second << std::endl;
        }
           int i;
        std::cin >> i;
        return EXIT_SUCCESS;
}


不太明白,为什么不能把MAPA::iterator itMapA = mapA.begin();放在for条件表达式外,请高手指点一下。

[ 本帖最后由 agui1226 于 2008-7-6 23:59 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-07-06 23:51 |只看该作者
原帖由 agui1226 于 2008-7-6 23:45 发表
int main(int argc,char* argv[])
{
        MAPA mapA;
        mapA[1] = 11;
        mapA[2] = 22;
        MAPB mapB;
        mapB[12] = mapA;
       
    for(MAPB::iterator itMapB = mapB.begin(); itMapB != mapB.end(); ++itMapB)
...

你描述得比较混乱 特别是最后一句话 建议把帖子编辑一下 A和B要分清楚

论坛徽章:
0
3 [报告]
发表于 2008-07-06 23:58 |只看该作者
感谢二楼的提醒,已经修改,请帮忙看一下,谢谢~~

论坛徽章:
0
4 [报告]
发表于 2008-07-07 00:06 |只看该作者

回复 #3 agui1226 的帖子

#include <map>
using namespace std;

int main()
{
        map<int, int> mapa;
        map<int, int>::iterator itmapa = mapa.begin();

        return 1;
}

我这个程序没问题 你用using namespace std;试一下

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
5 [报告]
发表于 2008-07-07 00:10 |只看该作者
不熟悉就别玩花样:
for (itMapA != mapA.end();++itMapA)
for (;itMapA != mapA.end();++itMapA)

论坛徽章:
0
6 [报告]
发表于 2008-07-07 00:13 |只看该作者

回复 #5 醉卧水云间 的帖子

还是ls看得仔细

论坛徽章:
0
7 [报告]
发表于 2008-07-07 00:22 |只看该作者
呵呵,多谢,还以为有什么不知道的东西呢。
粗心了。多谢两位帮忙哈,谢谢~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP