Чтобы понять, что происходит, нам нужно разбить первое утверждение на части:
struct _actor
{
...
};
typedef struct _actor _actor;
typedef struct _actor Actor;
Сначала мы создаем структуру с именем _actor
. Затем мы создаем typedef для struct _actor
с именем _actor
. Это полезно только в C. Это позволяет нам сказать:
_actor myActor;
вместо
struct _actor myActor;
Но в C ++ это не нужно, поскольку C ++ позволяет нам использовать первую форму без использования typedef.
Третья строка создает второй typedef для struct _actor
с именем Actor
.
Затем, когда вы пытаетесь создать класс с именем Actor
, компилятор жалуется, так как это имя уже используется для псевдонима для структуры.
Теперь представляется вероятным, что в исходном коде C автор намеревался struct _actor
быть просто подробностью реализации, и что вы всегда будете использовать просто Actor
для ссылки на экземпляры этой структуры. Следовательно, в вашем коде C ++ вы, вероятно, должны полностью исключить typedef и просто переименовать структуру. Тем не менее, это даст вам:
struct Actor {.....}
class Actor {.....}
Итак, возможно, вам стоит заняться объединением этих двух классов.