Компилятор читает ваш файл сверху вниз.
Когда он встречает void PrintEntity(Entity * e);
, он должен определить, является ли Entity * e
формальным параметром (делает это объявление функции) или умножением (делает этообъявление переменной с инициализатором).
Поскольку компилятор полностью не знает тип с именем «Entity», он решает, что это должно быть объявление переменной, а переменная не может иметь тип void
.
Решение состоит в том, чтобы объявить класс перед прототипом функции, либо отдельно:
class Entity;
void PrintEntity(Entity* e);
, либо непосредственно в объявлении функции:
void PrintEntity(class Entity* e);