à l'aide enum dit invalid conversion from 'int' à 'type'
Dans ma classe, j'ai défini un enum comme ceci:
class myClass
{
public:
enum access {
forL,
forM,
forA
};
typedef access AccessType;
AccessType aType;
};
Plus tard dans un objet comme ceci:
myClass ob;
ob->aType = 0;
Cependant, j'obtiens cette erreur:
erreur: invalid conversion from 'int' à 'myClass::AccessType {aka maclasse::l'accès}' [-fpermissive]
Ne pas les champs de type enum carte d'entiers?
- Double Possible: Cast int Enum en C#
Vous devez vous connecter pour publier un commentaire.
Non, ils sont stockés comme des entiers, mais ils sont de différents types (par exemple, vous pouvez même surcharge basée sur le type enum). Vous devez convertir explicitement:
ou jamais mieux d'écrire les correspondants désignés valeur de l'enum:
Ou peut-être si vous souhaitez utiliser le protocole enum comme un ensemble de constantes entières, modifier le type du champ:
Conversion de l'enum type int est implicite.
myClass::
.ob->aType=myClass::access::forL;
mais il dit "maclasse::accès" n'est pas une classe ou d'un espace de nomsob->aType=myClass::forL;
est correctauto exampleEnum = static_cast<MyClass::AccessType>(exampleInt);
Membres de l'énumération sont soutenus par des valeurs entières, mais il n'y a pas de implicite la conversion d'un entier à un type enum. Vous avez besoin d'utiliser un cast explicite si vous voulez vraiment l'écrire comme ceci:
Vous ne pouvez pas faire un cast implicite de int -> enum, car au moment de la compilation il n'y a aucun moyen de savoir que le casting est valide.
Vous peut faire les conversions implicites dans l'autre sens, de sorte que vous pouvez (si vous voulais) faire:
J'ai juste eu le même problème.
j'ai pour initialiser un objet à partir de ce que j'ai lu dans un fichier xml et pour sûr, je n'ai aucun contrôle sur ce qui pourrait arriver à ce fichier.
Constructeur a un enum comme argument :
Donc, lors de l'analyse du Xml que j'ai de le jeter. J'ai préféré ensuite pour gérer la distribution dans le constructeur si les autres classes n'ont pas de savoir qui est le valide les enums.
Mais aucun moyen d'être sûr de la valeur provenant xml sera dans la plage correcte.
Voici la solution je suis venu avec :
C'est un choix de la mise en œuvre, afin de forcer la valeur par défaut en cas de non cohérence des données. On pouvait préférer jeter une exception, dans mon cas, il va faire de cette façon.