set в class поменять bool переменную

в дебагере показывает что все работает и меняет, но когда я вывожу на принт оно не меняеться

class Theater
{
/...
private:
    std::vector<std::vector<Ticket>> tickets;
}

std::vector<std::vector<Ticket>> Theater::getVector()
{
    return tickets;
}

class Ticket
{
/...
private:
    int row{};
    int seat{};
    double price{};
    bool occupied{};
}
bool Ticket::getOccupied()
{
    return occupied;
}

void Ticket::setOccupied(bool occupied)
{
    this->occupied = occupied;
}

и в main хочу поменять значение с true на false для occupied

if (th.getVector()[row][seat].getOccupied() == true)
            th.getVector()[row][seat].setOccupied(false);

но ничего не происходит ...


Ответы (1 шт):

Автор решения: KoVadim

У Вас функция

std::vector<std::vector<Ticket>> Theater::getVector()
{
   return tickets;
}

возвращает копию вектора векторов.

Поэтому, когда Вы делаете вот так

th.getVector()[row][seat].setOccupied(false);

Вы на самом деле создаете временную копию, в ней меняете и потом эта копия удаляется...

Что делать? возвращать ссылку!

std::vector<std::vector<Ticket>>& Theater::getVector()
{
   return tickets;
}
→ Ссылка