La compréhension de la double répartition C++

J'essaie de comprendre comment la double répartition des œuvres. J'ai créé un exemple où un monstre guerrier et un dérivé de la classe abstraite Créature pouvait se battre. La classe Créature a la méthode de la "lutte", qui est définie dans les classes dérivées, et dans chaque classe dérivée est définie ce qui se passe si guerrier se bat avec guerrier ou avec le monstre etc. J'ai écrit le code suivant:

#include<iostream>
using namespace std;

class Monster;
class Warrior;

class Creature{
public:
    virtual void fight(Creature&) =0;
};

class Monster: public Creature{
    void fightwho(Warrior& w) {cout<<"Monster versus Warrior"<<endl; }
    void fightwho(Monster& m) {cout<<"Monster versus Monster"<<endl; }
public:
    void fight(Creature& c)  {c.fightwho(*this);}
};

class Warrior: public Creature{
    void fightwho(Warrior& w) {cout<<"Warrior versus Warrior"<<endl; }
    void fightwho(Monster& m) {cout<<"Monster versus Warrior"<<endl; }
public:
    void fight(Creature& c) {c.fightwho(*this);}
};

int main()
{
Warrior w;
Monster m;
w.fight(m);
}

Cette résultats dans d'erreur du compilateur, que je prévois:

ex12_10.cpp: En fonction de membre de ‘virtual void Monstre::lutte(Créature&)’: ex12_10.rpc:17:30: erreur: classe de Créature " n'a pas de membre nommé ‘fightwho’

ex12_10.cpp: En fonction de membre de ‘virtual void Guerrier::lutte(Créature&)’: ex12_10.rpc:24:29: erreur: classe de Créature " n'a pas de membre nommé ‘fightwho’

Mais je ne sais pas comment procéder à partir d'ici... s'il vous Plaît aider.

Quel livre/tutoriel êtes-vous la suite?

OriginalL'auteur gartenzwerg | 2012-09-25