我有一个类Lobby,它处理一个Players列表(这是一个抽象类,只有纯虚方法),现在我尝试执行以下操作:
...
std::list<Player*> list;
...
Lobby::Lobby (std::string name, unsigned int size){
m_size = size;
m_name = name;
std::list<Player*> list(size);
}
...
void Lobby::removePlayer(int playerID){
for (std::list<Player*>::iterator it = list.begin(); it != list.end(); it++){
if ((*it)->id == playerID){
it = list.erase(it);
}
}
}
...
我总是得到两个错误,并且没有办法解决它们:
error C2259: 'Member' : cannot instantiate abstract
class
我几乎是C ++中的新手,但是如果我使用基类的指针列表它应该有用吗?!
IntelliSense: no suitable user-defined conversion from "std::_List_iterator<std::_List_val<std::_List_simple_types<Member>>>" to "std::_List_iterator<std::_List_val<std::_List_simple_types<Member *>>>" exists**
答案 0 :(得分:0)
我可以从错误消息中判断出您没有向我们展示实际代码。第二条消息告诉我们您有一个list<Member*>
,可能是list<Member>
,或者至少是两者的迭代器。 list<Member>
也可以解释第一个错误,因为list
操作会尝试构造不可能的Member
个对象。
我的猜测是,你在某个地方忘记了*
。
您还需要查看对象的生命周期。 C ++没有垃圾收集器,所以只删除该列表中的指针不会杀死Member
个对象本身。更好地使用像克里斯在他的评论中建议的智能指针。
答案 1 :(得分:0)
几点: 首先,你的问题。我看到你提供的代码没有任何问题,除了它不是你正在编译的代码。看起来,您有一个会员*列表,您可以将其称为会员。 其次,看看remove_if。它不适合你的工作。 最后,看起来你在这里有内存泄漏。你从列表中删除了播放器的实例,但也没有释放它的内存(调用删除)