日期:2014-05-16  浏览次数:20777 次

STL 编译问题
我在vstudio   2003里面编译成功的一个程序,到linux下面就报错了。下面是我的小程序,其中有一行是这个map_itr   =   second.erase(tmp_map_itr);   在linux下编译时(gcc/g++   3.3.1),报错说没有定义map的operator=操作,请问一下为什么?

《c++   primer   plus》这本书上作者说程序在vstudio   2003和linux   gcc/g++   3.3.1上都测试过,为什么我的不行呢?

急啊,谢谢大家先!

帮我看一下代码:
#include   <iostream>
#include   <iterator>
#include   <list>
#include   <map>

using   namespace   std;

struct   data{
int   i;
double   j;
data(int   a,   double   b):i(a),   j(b){}
};


int   _tmain(int   argc,   _TCHAR*   argv[])
{
typedef   map <int,   struct   data>   maptype;

ostream_iterator <int,   char>   out(cout,   " ");

maptype   first;
int   i;

typedef   pair <int,   struct   data>   data_pair;
for   (i   =   0;   i   <   5;   i++)   {
first.insert(data_pair(i,data(i,i+1)));
}

maptype   second(first);
maptype::iterator   map_itr;

for   (map_itr   =   second.begin();   map_itr   !=   second.end();   map_itr++)   {
if   (map_itr-> first   ==   3   ||   map_itr-> first   ==   2)   {

maptype::iterator   tmp_map_itr;
tmp_map_itr   =   map_itr;
map_itr   =   second.erase(tmp_map_itr);
map_itr--;

}
}

return   0;


------解决方案--------------------

------解决方案--------------------
都是很好的建议! 值得学习