免费注册 查看新帖 |

Chinaunix

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

[C++] 关于STL的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-14 06:55 |只看该作者 |倒序浏览
int _tmain(int argc, _TCHAR* argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;std::list<std::string> msg_list;
&nbsp;&nbsp;&nbsp;&nbsp;std::map<std::string,std::list<std::string>*> msgmap;
&nbsp;&nbsp;&nbsp;&nbsp;std::pair<std::map<std::string,std::list<std::string>*>::iterator,bool> Insert_Pair;

&nbsp;&nbsp;&nbsp;&nbsp;std::string msg1_1 = "key1_1";
&nbsp;&nbsp;&nbsp;&nbsp;std::string msg1_2 = "key1_2";
&nbsp;&nbsp;&nbsp;&nbsp;std::string msg1_3 = "key1_3";
&nbsp;&nbsp;&nbsp;&nbsp;std::string msg2_1 = "key2_1";
&nbsp;&nbsp;&nbsp;&nbsp;std::string msg2_2 = "key2_2";
&nbsp;&nbsp;&nbsp;&nbsp;std::string msg3_1 = "key3_1";

&nbsp;&nbsp;&nbsp;&nbsp;msg_list.push_back(msg1_1);
&nbsp;&nbsp;&nbsp;&nbsp;msg_list.push_back(msg1_2);
&nbsp;&nbsp;&nbsp;&nbsp;msg_list.push_back(msg1_3);
&nbsp;&nbsp;&nbsp;&nbsp;std::string usr_id1 = "358";

&nbsp;&nbsp;&nbsp;&nbsp;Insert_Pair = msgmap.insert(std::pair<std::string,std::list<std::string>*>(usr_id1,&msg_list));

&nbsp;&nbsp;&nbsp;&nbsp;if (Insert_Pair.second == true)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Insert Successfullyn");
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Insert Failuren");
&nbsp;&nbsp;&nbsp;&nbsp;}


&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


但是 出现了
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std:perator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &”: 无法从“重载函数类型”为“const std::_Tree<_Traits> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(1466) : 参见“std:perator <”的声明
1>        c:program filesmicrosoft visual studio 9.0vcincludefunctional(142): 编译类 模板 成员函数“bool std::less<_Ty>:perator ()(const _Ty &,const _Ty & const”时
1>        with
1>        [
1>            _Ty=std::string
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludemap(6: 参见对正在编译的类 模板 实例化“std::less<_Ty>”的引用
1>        with
1>        [
1>            _Ty=std::string
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(22): 参见对正在编译的类 模板 实例化“std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,_Mfl>”的引用
1>        with
1>        [
1>            _Kty=std::string,
1>            _Ty=std::list<std::string> ,
1>            _Pr=std::less<std::string>,
1>            _Alloc=std::allocator<std::pair<const std::string,std::list<std::string> >>,
1>            _Mfl=false
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(63): 参见对正在编译的类 模板 实例化“std::_Tree_nod<_Traits>”的引用
1>        with
1>        [
1>            _Traits=std::_Tmap_traits<std::string,std::list<std::string> ,std::less<std::string>,std::allocator<std::pair<const std::string,std::list<std::string> >>,false>
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(89): 参见对正在编译的类 模板 实例化“std::_Tree_ptr<_Traits>”的引用
1>        with
1>        [
1>            _Traits=std::_Tmap_traits<std::string,std::list<std::string> ,std::less<std::string>,std::allocator<std::pair<const std::string,std::list<std::string> >>,false>
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(107): 参见对正在编译的类 模板 实例化“std::_Tree_val<_Traits>”的引用
1>        with
1>        [
1>            _Traits=std::_Tmap_traits<std::string,std::list<std::string> ,std::less<std::string>,std::allocator<std::pair<const std::string,std::list<std::string> >>,false>
1>        ]
1>        c:program filesmicrosoft visual studio 9.0vcincludemap(7: 参见对正在编译的类 模板 实例化“std::_Tree<_Traits>”的引用
1>        with
1>        [
1>            _Traits=std::_Tmap_traits<std::string,std::list<std::string> ,std::less<std::string>,std::allocator<std::pair<const std::string,std::list<std::string> >>,false>
1>        ]
1>        e:testvs2008msgtestmsgtestmsgtest.cpp(16): 参见对正在编译的类 模板 实例化“std::map<_Kty,_Ty>”的引用
1>        with
1>        [
1>            _Kty=std::string,
1>            _Ty=std::list<std::string> *
1>        ]
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std:perator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &”: 无法从“重载函数类型”为“const std::_Tree<_Traits> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(1466) : 参见“std:perator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std:perator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &”: 无法从“重载函数类型”为“const std::_Tree<_Traits> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(1466) : 参见“std:perator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std:perator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &”: 无法从“重载函数类型”为“const std::_Tree<_Traits> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludextree(1466) : 参见“std:perator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std:perator <(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &”: 无法从“重载函数类型”为“const std::list<_Ty,_Ax> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludelist(1310) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &”: 无法从“重载函数类型”为“const std::list<_Ty,_Ax> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludelist(1310) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &”: 无法从“重载函数类型”为“const std::list<_Ty,_Ax> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludelist(1310) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::list<_Ty,_Ax> &,const std::list<_Ty,_Ax> &”: 无法从“重载函数类型”为“const std::list<_Ty,_Ax> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludelist(1310) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &”: 无法从“重载函数类型”为“const std::reverse_iterator<_RanIt> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2262) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)”: 无法从“重载函数类型”为“const std::reverse_iterator<_RanIt> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2262) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)”: 无法从“重载函数类型”为“const std::reverse_iterator<_RanIt> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2262) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)”: 无法从“重载函数类型”为“const std::reverse_iterator<_RanIt> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2262) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 无法从“重载函数类型”为“const std::_Revranit<_RanIt,_Base> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2072) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 无法从“重载函数类型”为“const std::_Revranit<_RanIt,_Base> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2072) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 无法从“重载函数类型”为“const std::_Revranit<_RanIt,_Base> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2072) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)”: 无法从“重载函数类型”为“const std::_Revranit<_RanIt,_Base> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludexutility(2072) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 无法从“重载函数类型”为“const std::pair<_Ty1,_Ty2> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludeutility(99) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 无法从“重载函数类型”为“const std::pair<_Ty1,_Ty2> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludeutility(99) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 无法从“重载函数类型”为“const std::pair<_Ty1,_Ty2> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludeutility(99) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2784: “bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)”: 无法从“重载函数类型”为“const std::pair<_Ty1,_Ty2> &”推导 <未知> 参数
1>        c:program filesmicrosoft visual studio 9.0vcincludeutility(99) : 参见“std::operator <”的声明
1>c:program filesmicrosoft visual studio 9.0vcincludefunctional(143) : error C2676: 二进制“<”: “const std::string”不定义该运算符或到预定义运算符可接收的类型的转换


请问这是怎么回事?

[ 本帖最后由 flaght 于 2009-12-14 09:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-12-14 09:26 |只看该作者
Insert_Pair = msgmap.insert(std::pair<std::string,std::list<std::string>>(usr_id1,&msg_list));

一个是list* 一个是list?

论坛徽章:
0
3 [报告]
发表于 2009-12-14 09:34 |只看该作者

回复 #2 cnangel 的帖子

我已经修改了 但是还是有这些错误......

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
4 [报告]
发表于 2009-12-14 09:46 |只看该作者
兄台,你是不是忘记了如下的内容啊:


#include <string>
#include <list>
#include <map>
using namespace std;


你的代码在VS2005中编译正常。

如果没有加上述内容,报错如下:
d:\workshop\e\vcprj\delthis\delthis.cpp(86) : error C2039: 'list' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(86) : error C2065: 'list' : undeclared identifier
d:\workshop\e\vcprj\delthis\delthis.cpp(86) : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(86) : error C2065: 'msg_list' : undeclared identifier
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2039: 'map' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2065: 'map' : undeclared identifier
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2039: 'list' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(87) : error C2059: syntax error : '>'
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2039: 'map' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2039: 'list' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2059: syntax error : '>'
d:\workshop\e\vcprj\delthis\delthis.cpp(8 : error C2039: 'iterator' : is not a member of '`global namespace''
d:\workshop\e\vcprj\delthis\delthis.cpp(97) : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
d:\workshop\e\vcprj\delthis\delthis.cpp(9 : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
d:\workshop\e\vcprj\delthis\delthis.cpp(99) : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2065: 'Insert_Pair' : undeclared identifier
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2065: 'msgmap' : undeclared identifier
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2228: left of '.insert' must have class/struct/union
        type is ''unknown-type''
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2039: 'list' : is not a member of 'std'
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2275: 'std::string' : illegal use of this type as an expression
d:\workshop\e\vcprj\delthis\delthis.cpp(102) : error C2059: syntax error : '>'
d:\workshop\e\vcprj\delthis\delthis.cpp(104) : error C2228: left of '.second' must have class/struct/union
        type is ''unknown-type''

论坛徽章:
0
5 [报告]
发表于 2009-12-14 09:52 |只看该作者

回复 #4 star_in_sky 的帖子

没有啊。。。。。我加了头文件引用的....只是没有加using namespace std; 但是我在代码里面加了std::

论坛徽章:
0
6 [报告]
发表于 2009-12-14 13:01 |只看该作者
原帖由 flaght 于 2009-12-14 06:55 发表
int _tmain(int argc, _TCHAR* argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;std::list msg_list;
&nbsp;&nbsp;&nbsp;&nbsp;std::map msgmap;
&nbsp;&nbsp;&nbsp;&nbsp;std::pair Insert_Pair;

&nbsp;&nbsp;&nbsp ...

用typedef吧  你这样直接写看了头晕

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
7 [报告]
发表于 2009-12-14 13:34 |只看该作者
兄台,查查MSDN看STL在你的编译环境中是否存在些变化。在2005中你的代码可以编译的。
查查看。

还有啊,象“皇家救星”说的那样,用typedef把类似的std::list地方重新
定义下吧。看的是挺晕的~~~~

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
8 [报告]
发表于 2009-12-15 05:17 |只看该作者

回复 #1 flaght 的帖子

许多人都说STL出错让人看不懂
为什么明明是自己错在先,却非要赖在"错误信息让人看不懂"上

*((int*)0) = 1212; 有人会抱怨这行代码只会造成segment fault,而没有指出源代码中哪一行出错了吗?

anyway: 使用std::string, 首先检查自己是否忘记加上#include <string>。

论坛徽章:
0
9 [报告]
发表于 2010-05-23 22:56 |只看该作者
great.

论坛徽章:
0
10 [报告]
发表于 2010-05-25 13:34 |只看该作者
Insert_Pair = msgmap.insert(std::pair<std::string,std::list<std::string>*>(usr_id1,&msg_list));
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP