传递指针矢量作为参数

时间:2012-03-02 15:17:15

标签: c++ vector

void spawn_enemies(vector<Enemy>& enemies) {

我有这个功能,它可以很好地传递Enemy的矢量作为参数。

但是,我知道有一个<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 个答案:

答案 0 :(得分:2)

如果你有一个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将不再尝试使用它之前不要删除它。或者只是使用智能指针而不是原始指针。