我有一个类项目,每个项目可以有不同的任务。
H项目:
#pragma once
#include "Task.h"
#include <vector>
using namespace std;
class Project
{
private:
vector<Task> Tasks;
public:
Project::Project(int inleesgetal);//constructor
vector<Task> GetTasks();
};Project.cpp:
#include "Project.h"
#include <string>
#include <vector>
Project::Project(int inleesgetal)
{
//constructor
Tasks.resize(Numbertasks);
}
vector<Task> Project::GetTasks()
{
return Tasks;
}任务h:
#pragma once
#include <vector>
using namespace std;
class Task
{
private:
//Info:
int StartTime_Solo;
public:
Task(); //constructor
void SetStartTime_Solo(int st_s);
int GetStartTime_Solo();
};Task.cpp:
#include "Task.h"
#include <string>
#include <vector>
#include <iostream>
using namespace std;
Task::Task()
{
//constructor
StartTime_Solo = 0;
}
int Task::GetStartTime_Solo()
{
return StartTime_Solo;
}
void Task::SetStartTime_Solo(int st_s)
{
StartTime_Solo = st_s;
}主要:
#include <iostream>
#include <vector>
#include "Task.h"
#include "Project.h"
using namespace std;
int main()
{
Project Project1(6);
Project1.GetTasks()[2].SetStartTime_Solo(55);
cout << "test:" << Project1.GetTasks()[2].GetStartTime_Solo();
return 0;
}现在,当我尝试将Project1的第三项任务设置为55开始时,然后打印出开始时间,结果仍然是0。为什么会这样呢?我怎样才能改变我的代码,使它实际上将启动时间设置为55?
发布于 2016-10-13 16:10:06
vector<Task> GetTasks();应该是
const vector<Task>& GetTasks() const;
vector<Task>& GetTasks();定义也是如此:
vector<Task> Project::GetTasks()
{
return Tasks;
}应:
const vector<Task>& Project::GetTasks() const { return Tasks; }
vector<Task>& Project::GetTasks() { return Tasks; }发布于 2016-10-13 16:12:15
问题是,您正在从vector<Task>函数返回一个GetTasks副本。然后修改这个副本,然后立即丢弃它。Project的内部成员不会更改。
如果你像这样通过引用返回:
vector<Task>& GetTasks();然后基本上是返回指向内部向量的内容,所以当您修改它时,您实际上修改了类的成员数据。
https://stackoverflow.com/questions/40025956
复制相似问题