无法修改类中的对象向量

时间:2016-11-04 22:07:17

标签: c++ function c++11 vector constructor

我试图访问向量中的对象并更改某些属性,但它并没有修改它。 (对不起法国代码)

 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

感谢您的帮助

1 个答案:

答案 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版本接收的向量)。