【发布时间】:2014-10-10 17:27:25
【问题描述】:
假设我有一个类指针向量 Tower,如下所示:
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*>>
谁能解释为什么我在尝试擦除这个塔指针时收到这个编译错误?如果您需要更多详细信息,请告诉我。谢谢
【问题讨论】:
-
tower_list.erase(tower_list.begin());- 请查看 std::vector 的文档 -
@DieterLücking 这似乎有效。为什么我不能简单地放索引?如果我不想删除第一个元素怎么办?
-
您可以为迭代器添加偏移量。 (例如 tower_list.erase(tower_list.begin()+2);)
-
谢谢大家。有人可以告诉我这是否会删除实际的 Tower 对象或指针?
-
它不会删除指向的塔。如果您希望指向的对象在从向量中删除时自动删除,请使用
vector<unique_ptr<Tower>>。