这是我的对象类:
append
主要,我要遍历class person
{
public:
int id;
Rect rect;
};
的向量,当找到匹配项时,我想将persons
更新为一些新的rect
,甚至替换整个新对象{{ 1}}。
rect
我在用注释标记的行上遇到的错误是:
person
还有这个:
Rect mr = boundingRect(Mat(*itc));
person per;
vector <person> persons;
vector <person>::iterator i;
i = persons.begin();
while (i != persons.end()) {
if ((mr & i->rect).area() > 0) {
rectangle(frame, mr, CV_RGB(255, 0, 0));
putText(frame, std::to_string(i->id).c_str(), mr.br(),
FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 255));
replace(persons.begin(), persons.end(), i->rect, mr); // this line causes error
break;
} else {
...
}
我尝试Error C2678 binary '==': no operator found which takes a left-hand operand of type 'person' (or there is no acceptable conversion)
对象并添加一个新对象,但是仍然遇到相同的错误。我已经读过C++ Remove object from vector,但不确定是否是我的问题,并且我没有使用C ++ 11,因此这些解决方案对我不起作用。
迭代器和我的Error C2679 binary '=': no operator found which takes a right-hand operand of type 'const _Ty' (or there is no acceptable conversion)
对象进行比较时是否有用?我认为这只是解决办法。
答案 0 :(得分:1)
如果要比较类型为person
的对象和类型为Rect
的对象(这是对replace
的调用所隐含的含义),则必须提供适当的比较运算符为此,请在您的Person
类中这样做,
bool operator== (const Rect &r) const { ... }
类似地,您需要一个具有如下签名(以及可能的实现)的赋值运算符:
person& operator= (const Rect &r) { rect = r; return *this; }