【发布时间】:2015-04-03 17:21:34
【问题描述】:
字典定义如下:
typedef boost::tuple<conn_ptr, handler_ptr, rdp_ptr> conn_tuple;
typedef std::map<GUID, conn_tuple> conn_map;
我们遇到了编译错误:
错误 9 错误 C2678: 二进制 '
那么我们解决它为:
struct GUIDComparer
{
bool operator()(const GUID & Left, const GUID & Right) const
{
// comparison logic goes here
if( (Left.Data1 == Right.Data1) && (Left.Data2 == Right.Data2) &&
(Left.Data3 == Right.Data3) && (memcmp(Left.Data4 , Right.Data4,sizeof(Right.Data4))==0) )
{
return true;
}
return false;
}
};
typedef boost::tuple<conn_ptr, handler_ptr, rdp_ptr> conn_tuple;
typedef std::map<GUID, conn_tuple, GUIDComparer> conn_map;
现在,全部编译好了,但是我们在运行时得到了一个异常(无效的操作符
我不知道哪里出了问题,如果有人可以帮助我会很高兴
【问题讨论】:
-
另外,请注意
<是“小于”,而不是“等于”。所以当memcmp()返回小于零的值时返回true。你实现了错误的谓词,这就是你得到异常的原因。 -
@feras 请查看修改后的答案。上一个有一个重要的逻辑错误。