我试图访问向量中的对象并更改某些属性,但它并没有修改它。 (对不起法国代码)
class Quincaillerie
{
vector<Caisse> vCaisses;
public:
Quincaillerie(int NBCaisse);
vector<Caisse> GetCaisses() const { return vCaisses; }
};
这里是我要访问和更改的向量vCaisses
class Caisse
{
int tempsFile;
public:
Caisse();
int GetTempsFile() const { return tempsFile; }
void AjouterTempsFile(int t) { tempsFile = t; }
};
这是班级
Caisse::Caisse() : tempsFile(0)
{
}
Quincaillerie::Quincaillerie(int NBCaisse) : vCaisses(NBCaisse, Caisse())
{
}
现在我试图这样做
int main()
{
Quincaillerie Magasin(NBCAISSES);
/****Here's the problem****/
Magasin.GetCaisses().at(0).AjouterTempsFile(100);
cout << Magasin.GetCaisses().at(0).GetTempsFile() << endl;
/****Does not work****/
}
它假设是cout 100,但是cout 0
感谢您的帮助
答案 0 :(得分:3)
尝试从vector<Caisse> &
而不是GetCaisses()
返回vector<Caisse>
。
如果您的GetCaisses()
按值返回vector<Caisse>
,则仅返回对象实例中vCaisses
的副本
因此,您修改一个副本,然后查询另一个未经修改的副本。
如果要修改返回值,则应编写第二个GetCaisses()
,而不是const
;
const vector<Caisse> & GetCaisses() const
{ return vCaisses; }
vector<Caisse> & GetCaisses()
{ return vCaisses; }
通过这种方式,GetCaisses()
方法将引用返回到vCaisees
,您可以修改它(如果您修改从非const版本接收的向量)。