Понимание двойной отправки C ++

Я пытаюсь понять, как работает двойная отправка. Я создал пример, в котором мог сражаться монстр и воин, полученные из абстрактного класса Существо. Класс Creature имеет метод «fight», который определяется в производных классах, и в каждом производном классе определяется, что происходит, если воин сражается с воином или с монстром и т. Д. Я написал следующий код:

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

Это приводит к ошибке компилятора, которую я предвижу:

ex12_10.cpp: В функции-члене & # x2018; виртуальная пустота Monster :: fight (Creature & amp;) & # x2019 ;: ex12_10.cpp: 17: 30: ошибка: & # x2018; класс Creature & # x2019; нет члена с именем & # x2018; fightwho & # x2019;

ex12_10.cpp: В функции-члене & # x2018; virtual void Warrior :: fight (Creature & amp;) & # x2019 ;: ex12_10.cpp: 24: 29: ошибка: & # x2018; класс Creature & # x2019; нет члена с именем & # x2018; fightwho & # x2019;

Но я не знаю, как действовать дальше ... Пожалуйста, помогите.

Ответы на вопрос(3)

Ваш ответ на вопрос