尝试擦除指针向量时出错

时间:2014-10-10 17:27:26

标签: c++ pointers vector erase

假设我有一个类指针的向量塔像这样:

vector<Tower*> tower_list;

我已经完成了一些操作,将Towers添加到我的矢量中,但现在当我尝试使用像这样的vector :: erase方法时

tower_list.erase(0);

我收到以下错误消息:

Error: no instance of overloaded function "std::vector<_ty, _Alloc>::erase[with _Ty=Tower*, _Allow=std:allocator<Tower*>]" matches the argument list argument types are: (int)
object type is: std::vector<Tower*, std::alocator<Tower*>>

任何人都可以解释为什么我在尝试擦除此塔指针时收到此编译错误?如果您需要更多详细信息,请告诉我们。感谢

2 个答案:

答案 0 :(得分:2)

vector::erase需要iterator,而不是整数。

因此,如果要删除向量中的第一个元素:

tower_list.erase (tower_list.begin());

http://en.cppreference.com/w/cpp/container/vector/erase

答案 1 :(得分:1)

cppreference.com开始,这些是erase上定义的重载std::vector函数。

iterator erase( iterator pos );
iterator erase( const_iterator pos );
iterator erase( iterator first, iterator last );
iterator erase( const_iterator first, const_iterator last );

参数0无法转换为带有一个参数的两个重载中的任何参数类型。

如果要删除包含NULL指针的项目,请使用:

std::vector<Tower*>::iterator iter = tower_list.find(nullptr);
if ( iter != tower_list.end() )
{
   tower_list.erase(iter);
}