-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);
    }
}
}
    ...

私はいつも 2 つのエラーを受け取りますが、それらを解決する方法がわかりません。

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 を見てください。それはあなたのために仕事をします。最後に、ここでメモリ リークが発生しているようです。リストからプレーヤーのインスタンスを削除しますが、そのメモリを解放しません (delete を呼び出します)。

于 2014-01-06T12:40:37.230 に答える