嗨,我很难理解为什么在函数调用changeAdBreak()之后,“played”的值仍为“false”。

在每个函数中,我都使用了一个引用参数来修改在main()函数内部创建的对象。

但是,将此对象传递给函数时,由于某些原因,未设置“播放”属性。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Video{
    public:
        bool played;
};

class AllVideos{
    public:
        vector<Video> ads;
};

void changeAd(Video& ad)
{
    ad.played = true;
}

void changeAdBreak(AllVideos& mybreak)
{
    changeAd(mybreak.ads[0]);
}

int main()
{
   AllVideos mybreak;
   Video my_ad;
   my_ad.played = false;

   mybreak.ads.push_back(my_ad);
   vector<AllVideos> breaks;
   breaks.push_back(mybreak);

   cout << "ad played = " << breaks[0].ads[0].played << endl;
   changeAdBreak(mybreak);
   cout << "ad played = " << breaks[0].ads[0].played << endl;

   return 1;
}

最佳答案

push_back将创建副本,因此当您执行breaks.push_back(mybreak);时,将插入到breaks中的元素与mybreak是不同的元素。

在原始对象上调用changeAdchangeBreak不会更改插入相应容器中的值。

09-07 00:31