Как передать вектор объектов в другой класс, а затем вызвать функцию внутри члена объекта в этом векторе?

0

Как передать вектор через вызов функции указателю на вектор в другом классе и вызвать функцию или элемент через принимающий класс; и как вызывать эту функцию в принимающем классе удаленно?

В этом примере object0 - это тип объекта, содержащий функцию, которая будет вызываться.

Object0 будет создан в объекте1 как член вектора.

Затем этот вектор будет передан объекту2, в котором он будет вызываться из внешнего объекта; здесь произвольно выбран как внутри объекта 1;

main() - это просто способ загрузки этого приложения, и я бы приветствовал предложения по его улучшению.

#include <vector> 
class object0
{
protected:
    int a;
    void function()
    {
        std::cout << "function called" << std::endl;
    }
};

class object2
{
    public:
    std::vector<object0> *object0vec;
    void knowvector(std::vector<object0> *_object0vec)
    {
        object0vec = _object0vec;
    }
};

class object1
{
public:
    object2* _object2;
    object1()
    {
        _object2 = new object2;
    }
    void init()
    {
        std::vector<object0> object0vec;
        object0vec.push_back(new object0)
        _object2.object0vec[0].function();

Как заставить эту линию работать? _object2.object0vec [0].function();

    }
};
int main()
{
    object1 newobject1;
    object1 &ref_newobject1 = newobject1;
    ref_newobject1.init();
}
Теги:
callback
pointers
vector
reference

1 ответ

0

В init():

"_object2" имеет время жизни такое же, как object1. Тем не менее, в init() вы предположительно передадите указатель на локальную переменную object0vec на knowvector(). Итак, теперь "_object2" имеет более длительный срок службы, чем объект, к которому у него есть poiner, но он не принадлежит. "knowvector" мог бы сделать копию вектора вместо сохранения указателя.

Синтаксис:

В Init() "_object2" является указателем, поэтому вам нужно использовать ->.

object2 :: object0vec также является указателем, но предположительно "object0vec [0]" предназначен для получения первого объекта в векторе, а не первого в массиве векторов.

_object2 -> (*object0vec)[0].function();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню