0

私はクラスを持っています:

class Monster : public Player
{
public:
    // Copy constructor - used for populating monster list in Game class
    Monster(int newType)
    {
        type = newType;
        canmove = true;
        notforward = false;
    }

    int type;

    bool operator==(const Monster& m) const {return type == m.type;}
    bool operator!=(const Monster& m) const {return type != m.type;}
    bool operator< (const Monster& m) const {return type <  m.type;}
    bool operator<=(const Monster& m) const {return type <= m.type;}
    bool operator> (const Monster& m) const {return type >  m.type;}
    bool operator>=(const Monster& m) const {return type >= m.type;}
};

一部の変数 (canmove や notforward など) は継承されます。次に、別のクラスで、モンスターのマップを作成します。

map<pair<int, int>, Monster> monsters; // Pair used for x and y coordinate

monsters.insert(make_pair(10, 10), Monster(10)); 
// Error - No instance of overloaded function

どうすればモンスター インスタンスをモンスター マップに入れることができますか? 挿入できるようにすべての演算子のオーバーロードを追加しましたが、機能しません!

4

1 に答える 1

0

簡単な方法は

monsters[make_pair(10, 10)] = Monster(10);

別の方法は

monsters.insert(make_pair(make_pair(10, 10), Monster(10)));

もう一つは

monsters.insert(map<pair<int, int>, Monster>::value_type(make_pair(10, 10), Monster(10)));

演算子のオーバーロードは不要です。値ではなく、マップのキーに対して operator< をオーバーロードする必要があります。2 番目のケースでは make_pair を 2 回呼び出す必要があるため、混乱したのではないでしょうか。

于 2013-05-10T04:24:29.933 に答える