C++类返回指针

C++ class return pointer

本文关键字:指针 返回 C++      更新时间:2023-10-16

我相信这可能是重复的,因为我不知道我应该用什么确切的术语来搜索正确的东西。

我正在与Arduino合作,我已经为多个Arduino和Raspberries之间的通信编写了库。

class Machine {
    public:
        // other functions here
        Mission & create_mission(int num);
    private:
        // other variables here
        Mission _missions[10];
    };

这是类实现:

    Mission & Machine::create_mission(int num) {
        Mission mission = Mission();
        mission.setNumber(num);
        _missions[_missions_count] = mission;
        _missions_count += 1;
        return _missions[_missions_count-1];
    }

据我所知,这是

    mission1 = machine.create_mission(1);

不指向类Machine中_missions数组中的相同任务。由于我没有使用c++的经验,问题是-我应该如何实现函数以返回_missions数组中的相同Mission?

完整的代码可以在这里下载(.zip):谜语.lv/code/code.zip

类似的东西?

    _missions[_missions_count] = mission;
    _missions_count += 1;
    return _missions[_missions_count-1];
}

您还需要将功能签名更改为

  Mission& Machine::create_mission(int num)

您可以通过引用返回:

声明:

Mission & create_mission(int num);

定义:

  Mission& Machine::create_mission(int num) {
        Mission mission = Mission();
        mission.setNumber(num);
        _missions[_missions_count] = mission;
        _missions_count += 1;
        return _missions[_missions_count - 1];
    }

或通过指针:

声明:

Mission* create_mission(int num);

定义:

Mission* Machine::create_mission(int num) {
            Mission mission = Mission();
            mission.setNumber(num);
            _missions[_missions_count] = mission;
            _missions_count += 1;
            return &_missions[_missions_count - 1];
        }

如果您希望对象在那里,通常会通过引用返回,这里就是这种情况。

目前,您正在返回一个临时(mission)的引用,这是不允许的。_missions[_missions_count] = mission;将你的任务对象复制到地图上,该地图将比你想要的create_mission范围更长。

您的代码创建一个新的任务对象,并将其分配给列表中的一个。然后将返回此临时对象。此外,create_mission()方法被声明为返回Mission对象的副本

你可以通过使用这样的参考来规避这一点:

 Mission &Machine::create_mission(int num) {
    // create a reference to one of the Missions in the array
    Mission &mission = _missions[_missions_count];
    // work on that Mission
    mission.setNumber(num);
    _missions_count += 1
    // return the reference;
    return mission;
}