关于CMap的使用

sdwalnut1 2005-08-24 03:36:51
本人在.net 2003中按照下面的方式使用CMap:

typedef struct tagSBIDKEY
{
BYTE byID[SB_NpS_IDBYTES];
tagSBIDKEY()
{
memset(byID, 0, SB_NpS_IDBYTES);
}
~tagSBIDKEY(){};
tagSBIDKEY& operator = (const tagSBIDKEY& key)
{
memcpy(byID, key.byID, SB_NpS_IDBYTES);
return *this;
}
BOOL operator == (const tagSBIDKEY key) const
{
return (0 == memcmp(byID, key.byID, SB_NpS_IDBYTES));
}
}SBIDKEY, *PSBIDKEY;


class CSBSheetItem
{
protected:
int m_nRefCount; // 被提交的次数
WORD m_wDataLen; // 客户端需要的数据长度
// qixin change begin 2003-7-14 ===>
// _int64 m_nIDEntry; // 数据项ID
SBIDKEY m_sIDEntry;
// qixin change end <===
DYNITEMDATA m_ItemData; // 服务项参数
CServerClient* m_pServerClient;

public:
CSBSheetItem(PIDENTRY, CServerClient*);
virtual ~CSBSheetItem();
SBIDKEY* GetIDEntry (); // 获取数据项ID
void AddRef (); // 增加引用值
void Release (); // 减少引用值
void SetData (PDYNITEMDATA); // 设置数据
WORD GetDataLen (); // 获取客户端需要的数据长度
PDYNITEMDATA GetData (); // 获取数据

};

CMap<SBIDKEY, SBIDKEY, CSBSheetItem*, CSBSheetItem*> *m_pSBSheetMap;
m_pSBSheetMap = new CMap<SBIDKEY, SBIDKEY, CSBSheetItem*, CSBSheetItem*> (300);
程序在最后两行编译不通过。而上面的内容在.Net 2002中编译能通过。
...全文
201 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2005-08-26
  • 打赏
  • 举报
回复
用CTypedPtrMap,基类类型用CMapPtrToPtr
真相重于对错 2005-08-25
  • 打赏
  • 举报
回复
CMap<SBIDKEY, SBIDKEY&, CSBSheetItem*, CSBSheetItem*> *m_pSBSheetMap
sdwalnut1 2005-08-25
  • 打赏
  • 举报
回复
我认为是CMap的用法有些问题。哪位能给出具体解决办法
sdwalnut1 2005-08-25
  • 打赏
  • 举报
回复
楼上的方法我试过了,还是不行
sdwalnut1 2005-08-24
  • 打赏
  • 举报
回复

c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(161) : error C2440: “类型转换” : 无法从“SBIDKEY”转换为“DWORD_PTR”
没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1619) : 参见对正在编译的函数模板实例化“UINT HashKey<ARG_KEY>(ARG_KEY)”的引用
with
[
ARG_KEY=SBIDKEY
]
。。。。
oyljerry 2005-08-24
  • 打赏
  • 举报
回复
什么编译错误

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧