love in C++, live on MFC

to get ready...

C++博客 首页 新随笔 联系 聚合 管理
  47 Posts :: 0 Stories :: 97 Comments :: 0 Trackbacks
CMap在用CString做key类型时,ARG_KEY要选LPCTSTR
文章来源:http://blog.csdn.net/flyingxu/archive/2005/12/26/562852.aspx

遇到好几个人说CMap在用CString做key类型时有问题,说用int和DWORD就可以,用CString就不行。因此很多人推荐使用MFC中的CMapStringToPtr之类。

看下面的代码:
//.h
    CMap<CString, LPCTSTR, int, int> typeMap;
//.cpp
    typeMap.SetAt(_T("ONE"),1);
    typeMap.SetAt(_T("TWO"),2);

    int nValue = 0;
    BOOL ret = typeMap.Lookup(_T("ONE"), nValue);
    ret = typeMap.Lookup(_T("THREE"), nValue);
    ret = typeMap.Lookup(_T("TWO"), nValue);
我的代码运行的很好,我觉得关键是ARG_KEY要选LPCTSTR

posted on 2005-12-27 07:17 flyingxu 阅读(10832) 评论(7)  编辑 收藏 引用 所属分类: VC/MFC

Feedback

# re: 用CString作为Key使用CMap 2006-04-17 17:20 flyingxu
这篇文章说明了为什么
http://www.codeproject.com/cpp/cmap_howto.asp  回复  更多评论
  

# re: 用CString作为Key使用CMap 2008-04-17 10:33 coco_yin
我依照你的写了程序
但是生成的时候报了这样的错误,能帮帮我吗
e:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1780) : error C2143: 语法错误 : 缺少“)”(在“[”的前面)  回复  更多评论
  

# re: 用CString作为Key使用CMap 2008-04-17 10:34 coco_yin
e:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1780) : error C2143: 语法错误 : 缺少“)”(在“[”的前面)
e:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlsimpstr.h(273) : 编译类模板成员函数“void CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>::Serialize(CArchive &)”时
with
[
KEY=CString,
ARG_KEY=LPCTSTR,
VALUE=float,
ARG_VALUE=float
]
c:\documents and settings\administrator\桌面\辅网opc客户端(udp转发)\辅网opc客户端(udp转发)\sendudp.h(46) : 参见对正在编译的类模板实例化“CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>”的引用
with
[
KEY=CString,
ARG_KEY=LPCTSTR,
VALUE=float,
ARG_VALUE=float
]
e:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1780) : error C2059: 语法错误 : “)”
e:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1780) : error C3861: “SetAtnewKey”: 即使使用参数相关的查找,也未找到标识符
  回复  更多评论
  

# re: 用CString作为Key使用CMap 2008-04-17 10:37 coco_yin
我在头文件中定义
CMap<CString,LPCTSTR,float,float> typeMap;

在CPP中使用
ret= typeMap.Lookup(l_sV,l_fV);
  回复  更多评论
  

# re: 用CString作为Key使用CMap 2008-04-17 16:19 visual c++ mfc
我在vs2003中试过了,没有问题
也看了afxtempl.h(1780)  回复  更多评论
  

# re: 用CString作为Key使用CMap[未登录] 2010-07-24 16:48 ice
我使用CMap<CString, LPCTSTR, HMODULE, HMODULE> map;
用来存储dll句柄,没问题  回复  更多评论
  

# re: 用CString作为Key使用CMap 2011-06-23 00:31 erabbit
需要#include <Afxtempl.h>,否则编译时会报错  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理