Передать вектор указателей в качестве аргумента - PullRequest
1 голос
/ 02 марта 2012
void spawn_enemies(vector<Enemy>& enemies) {

У меня была эта функция, и она прекрасно работала, чтобы передать вектор Enemy's в качестве аргумента.

Однако я знаю, что у вектора есть <Enemy*>, и он не 'не так хорошо, и я также пытался использовать:

void spawn_enemies(vector<Enemy*>& enemies) {

Но это тоже не сработало, я получаю следующую ошибку при компиляции:

src/Paxlure.cpp:32:28: error: no matching function for call to ‘std::vector<Enemy*>::push_back(Enemy&)’
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/stl_vector.h:826:7: note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Enemy*, _Alloc = std::allocator<Enemy*>, std::vector<_Tp, _Alloc>::value_type = Enemy*]
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../include/c++/4.6.2/bits/stl_vector.h:826:7: note:   no known conversion for argument 1 from ‘Enemy’ to ‘Enemy* const&’

Спасибо

1 Ответ

2 голосов
/ 02 марта 2012

Если у вас есть vector указателей, вам нужно push_back указателей, а не объектов.

vector<Enemy> enemies;
Enemy e;
enemies.push_back(e);

против

vector<Enemy*> enemies;
Enemy* pe = new Enemy;
enemies.push_back(pe);

В последнем случае, с динамически распределяемой памятью, вам необходимо освободить ее самостоятельно: delete pe;. Но вы должны убедиться, что правильно управляете памятью - не удаляйте ее, пока не убедитесь, что vector больше не будет пытаться работать с ней. Или просто используйте умные указатели вместо сырых.

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