... или полностью удалите перегрузку AddObject (Mobile * object). Без этой функции она будет «неявно приведена» к своему базовому классу, и была бы вызвана функция AddObject (DrawableObject *). Вам не нужно вручную добавлять перегрузку и приведение для каждого типа в вашей иерархии.
Редактировать Код был добавлен, я хочу уточнить некоторые предложения о вашем дизайне.
Либо ваш класс "Game" обрабатывает все объекты одинаково, либо нет. Если это не так, нет смысла предоставлять универсальную перегрузку AddObject, которая является общедоступной - вы уже тесно связаны с отдельными объектами, так что вы могли бы также отбросить ее и шарад слабо связанной конструкции. Вы все еще можете использовать его как частную вспомогательную функцию AddObjectInternal. Поскольку это не перегрузка, вам не понадобится приведение для устранения неоднозначности вызова.
Если вы планируете или хотите обрабатывать все объекты единообразно, рассмотрите возможность использования такой логики, которую вы в настоящее время вносите в перегрузки AddObject, в виртуальные функции класса объектов. Тогда у вас есть только один метод AddObject, который вызывает виртуальные функции для добавленного объекта.