Из-за приоритета оператора выражение *enemya -> attack()
равно *(enemya -> attack())
.
То есть вы пытаетесь разыменовать то, что возвращает enemya -> attack()
, а это ничто.
Кажется, вы неправильно понимаете, как работают указатели на объект, поскольку вы пытаетесь разыменовать указатели дважды . Либо используйте оператор стрелки ->
, либо используйте оператор унарного разыменования *
с оператором точки .
.
т.е. либо enemya -> attack()
, либо (*enemya) . attack()
.