【发布时间】:2015-08-05 20:41:11
【问题描述】:
我正在尝试在列表中查找一个元素:
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
class Testing {
public:
Testing();
}
list<Testing> Testing_List;
Testing Testing_Object;
auto List_Index = find(Testing_List.begin(), Testing_List.end(), Testing_Object);
它给了我错误信息
Semantic Issue. Invalid Operands to binary expression
template <class _InputIterator, class _Tp>
inline _LIBCPP_INLINE_VISIBILITY
_InputIterator
find(_InputIterator __first, _InputIterator __last, const _Tp& __value_)
{
for (; __first != __last; ++__first)
if (*__first == __value_)
break;
return __first;
}
大概是因为没有为测试类定义适当的比较运算符==。所以我所做的是尝试为 Testing 类定义 == 运算符,如下所示:
bool operator==(const Testing & lhs, const Testing & rhs) {
return &lhs == &rhs;
}
仍然没有运气!你能告诉我有什么问题吗?我应该如何在该测试对象列表中查找元素?
非常感谢您的宝贵时间。
【问题讨论】:
-
你能发布错误信息吗?
-
另外,使用
operator==的定义,你永远不会在Testing_List中找到Testing_Object。 -
@john 哎呀,我没看到 :)
-
@becko。谢谢,我在上面的问题中包含了错误消息。
-
我假设你正在做
Testing_List.push_back(Testing_Object);然后期待找到它?在这种情况下,&lhs == &rhs测试将永远无法工作,因为push_back会复制对象 - 地址会有所不同。你需要想出一些其他的方法来比较对象而不是它们的地址。