CAtlMap 的key不能为自定义类吗

时间:2020-12-12 16:08:36
RT,我的代码如下:

struct CClientItem
{
public:
int m_nClnId; // client identity
int m_nPort; // client connect port
time_t m_timeAlive; // client alive time, time(NULL);
CString m_strIpAddr; // client connect address
bool m_bIsAlive;

CClientItem() : m_nClnId(0), m_nPort(0), m_timeAlive(0), m_strIpAddr(_T("")) // forbid default constructor
{
}

CClientItem(int nId) : m_nClnId(nId), m_nPort(0), m_strIpAddr(_T(""))
{
}

bool operator == (const CClientItem& clnIn) const
{
return (clnIn.m_nClnId == m_nClnId);
}
};

在声明CAtlMap<CClientItem, int> m_mapClientItem;作为类成员的时候,报告了如下错误

错误报告如下:

1>正在编译...
1>MainDlg.cpp
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(128) : error C2440: “<function-style-cast>”: 无法从“const CClientItem”转换为“ULONG_PTR”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(127): 编译类 模板 成员函数“ULONG ATL::CDefaultHashTraits<T>::Hash(const T &) throw()”时
1>        with
1>        [
1>            T=CClientItem
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(162): 参见对正在编译的类 模板 实例化“ATL::CDefaultHashTraits<T>”的引用
1>        with
1>        [
1>            T=CClientItem
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(170): 参见对正在编译的类 模板 实例化“ATL::CDefaultElementTraits<T>”的引用
1>        with
1>        [
1>            T=CClientItem
1>        ]
1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(1989): 参见对正在编译的类 模板 实例化“ATL::CElementTraits<T>”的引用
1>        with
1>        [
1>            T=CClientItem
1>        ]
1>        e:\cw\project\companyproject\shplatform\shindustryplatform\common\wkraliveserver.h(34): 参见对正在编译的类 模板 实例化“ATL::CAtlMap<K,V>”的引用
1>        with
1>        [
1>            K=CClientItem,
1>            V=int
1>        ]
1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atlcoll.h(128) : error C2514: “ULONG”: 类没有构造函数
1>        c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(48) : 参见“ULONG”的声明

这是怎么回事呢?

3 个解决方案

#1


求大礼路过  CAtlMap 的key不能为自定义类吗

#2


在 VS2005中 你的代码编译成功。

#3


没人回答我还是结贴吧

#1


求大礼路过  CAtlMap 的key不能为自定义类吗

#2


在 VS2005中 你的代码编译成功。

#3


没人回答我还是结贴吧