Вы на самом деле не вызываете функцию, вы просто смотрите на значение указателя на функцию-член как на выражение void, которое не имеет никакого эффекта.Измените Penguin::Walk
на следующее:
void Penguin::Walk()
{
(this->*Methods[p])();
(*this.*Methods[p])();
}
Таким образом, вы фактически вызываете метод и передаете правильные аргументы (в данном случае нулевые аргументы).Обратите внимание, что вам нужны дополнительные скобки, поскольку вызовы функций имеют более высокий приоритет, чем операторы ->*
и .*
.