关于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 不是特别明白
谢谢了··· 展开
#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 不是特别明白
谢谢了··· 展开
2个回答
展开全部
此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/
#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/
展开全部
这是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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询