-1

我有一个类 Lobby 来处理玩家列表(这是一个抽象类,只有纯虚拟方法)现在我尝试执行以下操作:

    ...    
    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**
4

2 回答 2

0

几点:第一,到你的问题。我看不出你提供的代码有什么问题,除了它不是你正在编译的代码。看起来,您有一个成员列表*,您将其称为成员。二、看remove_if。它不适合你。最后,看起来你这里有内存泄漏。您从列表中删除播放器实例,但不释放它的内存(调用删除)

于 2014-01-06T12:40:37.230 回答
0

我可以从错误消息中看出您没有向我们展示实际代码。第二条消息告诉我们你有 alist<Member*>并且可能是 a list<Member>,或者至少是两者的迭代器。Alist<Member>也可以解释第一个错误,因为list操作尝试构造Member不可能的对象。

我的猜测是,你忘记了*某个地方。

您还需要查看对象的生命周期。C++ 没有垃圾收集器,因此仅从该列表中删除指针不会杀死Member对象本身。更好地使用像克里斯在他的评论中建议的智能指针。

于 2014-01-06T12:27:04.720 回答