我认为这可能是重复的,因为我不知道应该使用哪些确切的术语谷歌来做正确的事。
我正在和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
答案 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;
}