关于STL map容器的错误 求高手解答

#include<map>#include<string>#include<utility>#include<vector>#include<iostream>using... #include<map>
#include<string>
#include<utility>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
map<string,vector<int> > new_map;
vector<int> ivec;
ivec.push_back(1);
new_map.insert(pair<string,vector<int> >("sara",ivec));
map<string,vector<int> >::iterator iter=new_map.find("sara");
if(iter!=new_map.end())
cout<<(*iter).first;
system("PAUSE");
return 0;
}

我想问的是在VS2008中 顺利编译 为什么在VS6.0中会有113个警告
高手们给解释一下啊?我实在不知道为什么会有这么多警告,感觉语法没什么错误啊····
#include<vector>
#include<map>
#include<string>
#include<utility>
#include<iostream>
using namespace std;
int main()
{
vector<string> svec;
int count;
string family_name,name;
cin>>family_name;
map<string,vector<string> > name_map;
for(count=0; count!=6; ++count)
{
cin>>name;
svec.push_back(name);
name_map.insert(pair<string,vector<string> > (family_name,svec));
}
map<string,vector<string> > iter=name_map.find(family_name);
while(iter!=name_map.end())
cout<<ite->second<<endl;
system("PAUSE");
return 0;
}
顺便请大侠们看一下这个问题,VC6.0编译 1个错误,8个警告
vs2008竟然是83个错误,请帮忙看一下到底是哪儿出错了 ?小弟刚学STL 不是特别明白
谢谢了···
展开
 我来答
wanfustudio
2009-04-02 · TA获得超过1万个赞
知道大有可为答主
回答量:5513
采纳率:100%
帮助的人:3684万
展开全部
此warning产生的原因是因为标识符过长,超过了最大限定255个字.例如:
#define a_really_long_class_name a_really_really_really_really_really_really_really_ \
really_really_really_really_really_really_really_really_really_really_really_really_ \
really_really_really_really_really_really_really_really_really_really_really_really_really_really_really

class a_really_long_class_name
{
public:
a_really_long_class_name() {};
int m_data;
};
void main()
{
a_really_long_class_name test_obj;
test_obj.m_data = 12;
}

类名超过了255个字,使用时就会报4786的waring.在使用STL(C++标准模板库)的时候经常引发类似的错
误,尤其是vector,map这类模板类,模板中套模板,一不小心就超长了.例如:

template
class VeryLongClassNameA{};

template
class VeryLongClassNameB{};

template
class VeryLongClassNameC{};

template
class VeryLongClassNameD{};

class SomeRandomClass{};

typedef VeryLongClassNameD ClassD ;
typedef VeryLongClassNameC ClassC;
typedef VeryLongClassNameB ClassB;
typedef VeryLongClassNameA ClassA;

void SomeRandomFunction(ClassA aobj){}

void main()
{
ClassA AObj ;
SomeRandomFunction(AObj) ;
}

解决方法有两种,一种是直接定义别名:
#ifdef _DEBUG
#define VeryLongClassNameA A
#define VeryLongClassNameB B
#endif

另一种是屏蔽4786warning:
#pragma warning(disable : 4786)

注意屏蔽语句必须放在报错的模板类的引用声明(如#include )之前,否则还是不起作用.
2008-10-31 11:39:16
疯狂代码 http://www.CrazyCoder.cn/
心中风情4
2009-04-02 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1047万
展开全部
这是VS6.0自己的问题,用下面的方法可以过滤掉:
#pragma warning(disable:4786)

#include<vector>
#include<map>
#include<string>
#include<utility>
#include<iostream>
using namespace std;
int main()
{
vector<string> svec;
int count;
string family_name,name;
cin>>family_name;
map<string,vector<string> > name_map;
for(count=0; count!=6; ++count)
{
cin>>name;
svec.push_back(name);
name_map.insert(pair<string,vector<string> > (family_name,svec));
}
map<string,vector<string> >::iterator iter=name_map.find(family_name); //add ::iterator
if(iter!=name_map.end()) //should like this
{
vector<string>::iterator it = iter->second.begin();
while(it != iter->second.end())
{
cout<<(*it++)<<endl;
}
}
//while(iter!=name_map.end())
//cout<<iter->second<<endl; //ite to iter
system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式