Заменить объект в векторе с помощью итератора - PullRequest
0 голосов
/ 04 апреля 2019

Это мой класс объектов:

class person
{
public:

    int id;
    Rect rect;
};

В основном я перебираю вектор persons, и когда я нахожу совпадение, я хочу обновить rect до некоторого нового 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)

, а также эта:

Error   C2679   binary '=': no operator found which takes a right-hand operand of type 'const _Ty' (or there is no acceptable conversion)   

Я пытался erase добавить объект и добавить новый, но я все еще получал ту же ошибку.Я прочитал C ++ Удалить объект из вектора , но я не уверен, что это моя проблема, и я не использую C ++ 11, поэтому эти решения не работают для меня.

это что-то с итератором и моим person объектом, когда они приходят к сравнению?Я думаю, что это так, но не знаю, как это решить.

1 Ответ

1 голос
/ 04 апреля 2019

Если вы хотите сравнить объект типа person с объектом типа Rect (что подразумевает ваш вызов replace), то вы должны предоставить соответствующий оператор сравнения для этого в вашем *Класс 1004 *, например:

bool operator== (const Rect &r) const { ... }

Точно так же вам нужен оператор присваивания с подписью (и вероятной реализацией), например:

person& operator= (const Rect &r) { rect = r; return *this; }

Упрощенная живая демонстрация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...