C++ 未在其他函数中设置变量引用的问题

C++ 未在其他函数中设置变量引用的问题,c++,pointers,reference,C++,Pointers,Reference,您好,我很难理解为什么在调用changeAdBreak()函数之后,“played”的值仍然是“false” 在每个函数中,我都使用了一个引用参数来修改main()函数内部创建的对象 但是,当这个对象被传递到函数中时,由于某种原因,不会设置“played”属性 #include <iostream> #include <string> #include <vector> using namespace std; class Video{ public

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

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

但是,当这个对象被传递到函数中时,由于某种原因,不会设置“played”属性

#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;
}
#包括
#包括
#包括
使用名称空间std;
课堂录像{
公众:
布尔演奏;
};
课堂所有视频{
公众:
矢量广告;
};
void changeAd(视频和广告)
{
ad.played=true;
}
void changeAdBreak(所有视频和mybreak)
{
changeAd(mybreak.ads[0]);
}
int main()
{
所有视频我的休息;
我的视频广告;
我的广告播放=错误;
mybreak.ads.push_back(我的广告);
向量中断;
休息。推回(我的休息);

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


对原始对象调用
changeAd
changeBreak
不会更改插入到相应容器中的值。

向量中断定义为

vector<AllVideos> breaks;
包含对象mybreak的
副本
。因此,现在您有两个类型为AllVideos的对象:一个名为mybreak,另一个为vector Break。它们占用不同的内存

调用函数changeAdBreak

changeAdBreak(mybreak);
您更改了对象mybreak,但向量break中的对象没有更改,您输出了其数据成员

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