嗨,我很难理解为什么在函数调用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
是不同的元素。
在原始对象上调用changeAd
或changeBreak
不会更改插入相应容器中的值。