В этом случае предварительное объявление класса C ++ просто скажет компилятору, что тип, который вы используете, является классом.
Это часто полезно для заголовков, так как вам нужно только знать, что тип является классом. Включение заголовка класса заняло бы больше времени компиляции.
Но в реализации все по-другому. С классом forward, компилятор не будет знать о его членах, методах и т. Д.
Для этого вам нужно включить заголовочный файл класса.
Например, только с классом forward вы не можете сделать это:
owner->GetHealth();
Поскольку компилятор не может знать, что метод GetHealth
существует в вашем классе Player
, только с классом forward.
Обратите внимание, что у вас также может быть проблема в вашем методе AssignOwner
, поскольку вы реализуете его, используя свой заголовок. Я немного заржавел на C ++, так как я делаю C большую часть времени, но я думаю, что вы должны попытаться объявить только прототип в заголовке класса и реализовать фактический метод в вашем файле реализации, после включения правильного заголовочный файл.