C ++类返回指针

时间:2015-11-17 13:20:48

标签: c++ arduino

我认为这可能是重复的,因为我不知道应该使用哪些确切的术语谷歌来做正确的事。

我正在和Arduino合作,我已经为多个Arduinos和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数组中的同一个任务?

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

3 个答案:

答案 0 :(得分:2)

这样的东西?

    _missions[_missions_count] = mission;
    _missions_count += 1;

    return _missions[_missions_count-1];
}

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

  Mission& Machine::create_mission(int num)

答案 1 :(得分: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* 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范围。

答案 2 :(得分:0)

您的代码会创建一个新的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;
}