首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setter和getter /classes

setter和getter /classes
EN

Stack Overflow用户
提问于 2016-10-13 16:07:41
回答 2查看 657关注 0票数 1

我有一个类项目,每个项目可以有不同的任务。

H项目:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#include "Project.h"
#include <string>
#include <vector>
Project::Project(int inleesgetal)
{

    //constructor
    Tasks.resize(Numbertasks);
}

vector<Task> Project::GetTasks()
{
    return Tasks;
}

任务h:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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;
}

主要:

代码语言:javascript
复制
#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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-13 16:10:06

代码语言:javascript
复制
vector<Task> GetTasks();

应该是

代码语言:javascript
复制
const vector<Task>& GetTasks() const;
vector<Task>& GetTasks();

定义也是如此:

代码语言:javascript
复制
vector<Task> Project::GetTasks()
{
    return Tasks;
}

应:

代码语言:javascript
复制
const vector<Task>& Project::GetTasks() const { return Tasks; }
vector<Task>& Project::GetTasks() { return Tasks; }
票数 2
EN

Stack Overflow用户

发布于 2016-10-13 16:12:15

问题是,您正在从vector<Task>函数返回一个GetTasks副本。然后修改这个副本,然后立即丢弃它。Project的内部成员不会更改。

如果你像这样通过引用返回:

代码语言:javascript
复制
vector<Task>& GetTasks();

然后基本上是返回指向内部向量的内容,所以当您修改它时,您实际上修改了类的成员数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40025956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档