我有一个班级项目,每个项目可以有不同的任务。
Project.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;
}
Task.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的第3个任务设置为55的开始时间然后打印开始时间时,它仍然给出0作为结果。 为什么是这样?我如何更改我的代码,以便它实际上将启动时间设置为55?
答案 0 :(得分:2)
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; }
应该是:
SELECT su.orgid, arc.userid,
SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 WEEK,arc.processed_records,0)) Record_Week,
SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 MONTH,arc.processed_records,0)) Record_Month,
SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 3 MONTH,arc.processed_records,0)) Record_3Month,
SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 6 MONTH,arc.processed_records,0)) Record_6Month,
SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 YEAR,arc.processed_records,0)) Record_Year
FROM archive.log_archive arc
INNER JOIN prod_db.user su ON su.name = arc.userid
答案 1 :(得分:2)
问题是您要从vector<Task>
函数返回GetTasks
的副本。然后,您可以修改此副本,然后将其丢弃。 Project
的内部成员未更改。
如果您按照以下方式返回:
vector<Task>& GetTasks();
然后你基本上会返回指向内部向量的东西,所以当你修改它时,你实际上修改了你的类的成员数据。