Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试删除指针向量时出错_C++_Pointers_Vector_Erase - Fatal编程技术网

C++ 尝试删除指针向量时出错

C++ 尝试删除指针向量时出错,c++,pointers,vector,erase,C++,Pointers,Vector,Erase,假设我有一个类指针向量,如下所示: vector<Tower*> tower_list; 我收到以下错误消息: 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)

假设我有一个类指针向量,如下所示:

vector<Tower*> tower_list;
我收到以下错误消息:

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*>>
有人能解释为什么我在试图擦除这个塔指针时收到这个编译错误吗?如果你需要更多的细节,请告诉我。谢谢,vector::erase接受迭代器,而不是整数

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

tower_list.erase (tower_list.begin());
从中,这些是在std::vector上定义的重载擦除函数

无法将参数0转换为接受一个参数的两个重载中的任何参数类型

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

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

tower_list.erasetower_list.begin;-请查看std的文档:vector@DieterL你看这似乎管用。为什么我不能简单地把索引放进去?如果我不想删除第一个元素呢?你可以给迭代器添加一个偏移量。e、 g.塔列表。删除塔列表。开始+2;谢谢各位。有人能告诉我这是否会删除实际的塔对象或指针吗?它不会删除指向的塔。如果希望指向的对象在从矢量中删除时自动删除,请使用“矢量”。
iterator erase( iterator pos );
iterator erase( const_iterator pos );
iterator erase( iterator first, iterator last );
iterator erase( const_iterator first, const_iterator last );
std::vector<Tower*>::iterator iter = tower_list.find(nullptr);
if ( iter != tower_list.end() )
{
   tower_list.erase(iter);
}