Как изменить значение объекта c ++ в функции - PullRequest
1 голос
/ 18 апреля 2020

Я создал следующий класс:

class Data
{
    private:
        cv::Mat image;
        int n;
    public:
        void set(cv::Mat x,int y)
        {
            this->image = x;
            this->n = y;
        }
        cv::Mat get_image(void){return this->image;}
        int get_n(void){return this->n;}
}; 

Внутри основной функции я создаю объект класса Data, и мне нужно передать его внутри двух функций как указатели void:

Data data;
data.set(img, number, 0);
function_0((void*)&data);
function_1((void*)&data);

Проблема в том, что я не могу правильно изменить значения полей данных объекта. Например, в функции function_0 я делаю что-то вроде этого, но данные объекта не меняются от начального значения.

static void function_0(void* userdata)
{
    Data data = *(Data*) userdata; 

    // something

    data.set(img_0, number_0);
}

1 Ответ

1 голос
/ 18 апреля 2020

Просто используйте ссылку, в противном случае вы делаете копию своего объекта данных и изменяете копию.

static void function_0(void* userdata)
{
    Data& data = *(Data*) userdata; 

    // something

    data.set(img_0, number_0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...