我目前正在进行单一任务,在其中我们创建Task对象并为每个对象分配后继任务和前任任务以将它们链接在一起。当我尝试返回继任者或前任时,我不断收到此错误(如标题中所示) 这是Task.h的相关部分:
class Task {
private:
/**
* The set of predecessor tasks for this task.
* Can be empty.
*/
std::vector<Task*> task_from;
/**
* The set of successor tasks for this task.
* Can be empty.
*/
std::vector<Task*> task_to;
这是Task.cpp文件的相关部分(方法在给定索引处将数据拉出数组):
Task& Task::successor(int index) const {
if (index < 0) throw TaskException("");
Task temp = this->&task_to.at(index);
return temp;
}
请注意,方法签名是为作业预定义的,我们无法更改它们,只需要大括号内的代码即可。
另外,如果我不包含'&amp;'在这个&gt;&amp;任务...中,我收到错误“类型'任务'和'任务*'不兼容”
答案 0 :(得分:2)
您正试图通过引用返回一个函数局部变量,一旦从函数返回,它将为您留下悬空引用。如果您尝试在Task
中获得对vector
的引用,那么您的successor
功能将如下所示
Task& Task::successor(int index) const {
if (index < 0) throw TaskException("");
return *task_to.at(index);
}
知道这不会检查该索引处的Task*
是否不是nullptr
。