std :: vector не сохраняет данные? - PullRequest
1 голос
/ 10 февраля 2011

У меня есть этот код:


void BaseOBJ::update(BaseOBJ* surround[3][3])
{
    forces[0]->Apply(); //in place of for loop
    cout << forces[0]->GetStrength() << endl; //forces is an std::vector of Force*
}</p>

<p>void BaseOBJ::AddForce(float str, int newdir, int lifet, float lifelength)
{</p>

<pre><code>Force newforce;
newforce.Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), &newforce);
cout << forces[0]->GetStrength();

}

Теперь, когда я вызываю AddForce и создаю бесконечную силу с силой в 1, это равняется 1. Новызывается update, просто выводится 0, как будто силы больше не было.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

Вы сохраняете указатель на force в вашем векторе, но force является локальной функцией.

Вы должны использовать new для создания в куче.

Force* f = new Force;
forces.push_back(f);
3 голосов
/ 10 февраля 2011

Вам нужно создать свою Силу с новым:

Force *newforce = new Force;
newforce->Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), newforce); // or: forces.push_back(force);

Что происходит с вашим кодом, так это то, что ваш объект остается в стеке, после того, как вы покидаете функцию и делаете что-то еще, он перезаписывается.

Почему вектор указателей? Вероятно, вы хотите вектор силы, а не силы *. Вам также придется удалить все элементы вашего вектора, прежде чем выбросить его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...