Pour comprendre ce qui se passe, il faut briser la première instruction en ses parties:
struct _actor
{
...
};
typedef struct _actor _actor;
typedef struct _actor Actor;
Tout d'abord, nous créons une structure appelée _actor
. Ensuite, nous créons un typedef pour struct _actor
appelé _actor
. Ceci est seulement utile en C. Il nous permet de dire:
_actor myActor;
au lieu de
struct _actor myActor;
Mais en C++, il est inutile, comme C++ permet d'utiliser la première forme native, sans typedef .
La troisième ligne crée un deuxième typedef pour struct _actor
appelé Actor
. Lorsque vous essayez ensuite de créer une classe nommée Actor
, le compilateur se plaint, car ce nom est déjà utilisé pour l'alias de la structure. Maintenant, il semble probable que dans le code C d'origine, l'auteur avait voulu struct _actor
être simplement un détail d'implémentation, et que vous utiliseriez toujours juste Actor
pour faire référence aux instances de cette structure. Par conséquent, dans votre code C++, vous devriez probablement éliminer complètement les typedefs, et simplement renommer la structure. Cependant, cela vous donnera:
struct Actor {.....}
class Actor {.....}
Donc, vous devriez peut-être envisager de fusionner ces deux classes.
Par ailleurs, l'artefact typedef-struct est utilisé uniquement dans C, où les noms de structure et les noms des autres types résident dans des espaces de noms différents (ne pas être destinés au sens C++); dans C++, les noms de structure et de classe peuvent être utilisés "normalement", donc l'idiome C-typedef n'est pas nécessaire. –
Je vais sortir un membre et deviner que vous obtenez ces caractères dans le message d'erreur parce que vous utilisez mastic et devez définir l'option "Données reçues supposées être dans quel jeu de caractères" à UTF-8. –