假设我有一个类指针的向量塔像这样:
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*>>
任何人都可以解释为什么我在尝试擦除此塔指针时收到此编译错误?如果您需要更多详细信息,请告诉我们。感谢
答案 0 :(得分:2)
vector::erase
需要iterator
,而不是整数。
因此,如果要删除向量中的第一个元素:
tower_list.erase (tower_list.begin());
答案 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);
}