有像这样的班
class C_Service
{
public :
C_Service(); {memset(this, 0, sizeof(*this));}
C_Service(int type, int idx) {memset(this, 0, sizeof(*this)); this->type = type; this->idx = idx;}
bool operator==(const C_Service& svc) const { return (this->type == svc.type && this->idx == svc.idx);}
word type;
word idx;
dword aId;
dword bId;
char* name;
};
我使用了以下测试代码,
void vec_find(int type, int idx)
{
vector<C_Service*> vec;
// added several items in vector vec
...
vector<C_Service*>::iterator iter;
C_Service cSvc(type, idx);
iter = find(vec.begin(), vec.end(), &cSvc);
C_Service* findsvc = *iter;
if(findsvc)
printf("FOUND : type(%d), idx(%d), name(%s)\n", findsvc->type, findsvc->idx, findsvc->name);
else
printf("Not FOUND!!\n");
}
然后,它显示“未找到!”甚至设置正确的值。 我发现了问题并尝试更改。.
iter = find(vec.begin(), vec.end(), &cSvc);
到
iter = find(vec.begin(), vec.end(), cSvc);
删除"&"
然后给出编译错误消息
/ libcxx / algorithm:在'_InputIterator的实例中 std :: __ 1 :: find(_InputIterator,_InputIterator,const _Tp&)[ _InputIterator = std :: __ 1 :: __ wrap_iter; _Tp = C_Service]':
与'operator =='不匹配(操作数类型为'C_Service *'和'const C_Service')
我搜索到,当我在Container中使用find()
函数时,它可以使用operator==
但是,我没有目标。.T.T
我怎么了?
答案 0 :(得分:0)
问题在于您的vec
是指针的向量,而不是C_Service
对象的向量。
因此
find(vec.begin(), vec.end(), &cSvc)
检查cSvc
变量的地址是否包含在vec
中(这不是因为您刚刚创建了cSvc
,所以无法从其他任何地方引用它)。它根本不使用您的operator==
,它只是比较指针。
要解决此问题,您可以将vec
更改为std::vector<C_Service>
并执行
find(vec.begin(), vec.end(), cSvc)
或将自定义谓词传递给find_if
,您可以在其中手动取消引用指针:
find_if(vec.begin(), vec.end(), [&](const C_Service *p) { return *p == cSvc; })