清风竹林

ぷ雪飘绛梅映残红
   ぷ花舞霜飞映苍松
     ----- Do more,suffer less

std::map于vc6下的使用bug

  我不想用std::multimap,因为我希望能够使用index随机取得value部分的值,于是便希望定义一个std::map<int, std::vector<int>>的类型,结果在vc6中死活编译不过。我写的测试代码为:std::map<int, std::vector<int>>  test_map; 结果报错如下:

D:\me\document\VC6\test\test.cpp(34) : error C2146: syntax error : missing ',' before identifier 'test_map'
D:\me\document\VC6\test\test.cpp(34) : error C2065: 'test_map' : undeclared identifier
D:\me\document\VC6\test\test.cpp(34) : error C2143: syntax error : missing '>' before ';'

  于是改写成如下代码:
    typedef std::vector<int>            IntVector;
    typedef std::map<int, IntVector>    IntVectorMap;
    IntVectorMap test_map;


顺利编译通过 -_- 还真是邪门了。

注:std::map<int, std::vector<int>>  test_map; 在vs2005下顺利编译通过。



posted on 2009-02-03 10:40 李现民 阅读(2503) 评论(3)  编辑 收藏 引用 所属分类: 语法试炼

评论

# re: std::map于vc6下的使用bug[未登录] 2009-02-03 11:30 goodname

需要这样写
std::map<int, std::vector<int> > test_map;

在最右面的>前面加个空格  回复  更多评论   

# re: std::map于vc6下的使用bug 2009-02-03 14:07 Dancefire

goodname说的对,凡是形如 xxx<xxx<xxx>>这种模板嵌套的情况,c++当前的标准对此会报错,因为>>解析的问题。当前的解决办法是在两个相邻的>>之间添加一个空格。

C++09已经修复了这个问题,在今年即将公布的新标准中,你这样定义是没有任何问题的。不同的编译器有不同的处理。自从C++委员会主席加入vc团队后,vc一直在标准兼容上处于领先地位。特别是c++/cli,允许上述写法,C++自然也继承了这个特性,所以你在vs2005下编译有可能通过。当然vc6这种老掉牙的东西是不支持的。

但是你不应该以是否编译通过为撰写代码的衡量标准,应该按照标准兼容的方式写代码。因此目前而言,为了兼容C++标准,你应该在两个大于号之间加空格,以保证这段代码可以在其它编译器下可以工作。  回复  更多评论   

# re: std::map于vc6下的使用bug 2009-02-06 16:04 李现民

@goodname
谢谢, 我是不知道应该这样处理的,现在知道了

同样感谢 Dancefire  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理