Les énumérations à l'intérieur d'une classe C++
Je suis en train d'essayer d'utiliser une classe qui a un type enum déclaré à l'intérieur de la classe comme ceci:
class x {
public:
x(int);
x( const x &);
virtual ~x();
x & operator=(const x &);
virtual double operator()() const;
typedef enum {
LINEAR = 0, ///Perform linear interpolation on the table
DIPARABOLIC = 1 ///Perform parabolic interpolation on the table
} XEnumType;
};
J'ai besoin de déclarer une instance de cette classe et d'initialiser le type enum. Je viens de C# et normalement voir les énumérations, a déclaré à l'EXTÉRIEUR de la classe, pas à l'INTÉRIEUR, comme c'est ici. Comment initialiser le type enum. Par exemple, je veux faire quelque chose comme ceci:
x myX(10);
myX.XEnumType = Linear;
Évidemment, cela ne fonctionne pas. Comment puis-je faire?
OriginalL'auteur Blade3 | 2011-05-06
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord déclarer une variable du type
XEnumType
au sein de votre classeVous pouvez alors accéder au réel des valeurs d'une énumération en utilisant le nom de la classe pour la portée:
x::LINEAR
oux::DIPARABOLIC
typedef
mot-clé face à l'enum (il suffit d'utiliserenum XEnumType {...}
) - vous êtes en C++ maintenant.Ne fait pas de mal à l'avoir, mais vous avez raison, le typedef est inutile en c++
OriginalL'auteur Dan F
Première: Ne pas utiliser
typedef
. Au lieu de cela, mettez le nom de l'énumération dans sa têteEn un mot, de faire comme vous l'avez fait va se comporter surtout le même, mais dans les arcanes coin des cas sera différent. La syntaxe que vous avez utilisé un comportement très différent de la syntaxe que j'ai utilisé ci-dessus uniquement en C.
Deuxième: Que juste définit un type. Mais vous souhaitez définir un objet de cette énumération. Faire:
En résumé:
En C, la déclaration d'une
struct MyStruct {};
nécessaire, vous pouvez toujours vous référer au typestruct MyStruct
. C'est pourquoi les gens ont fait untypedef struct {} MyStruct;
, pour qu'ils puissent utiliser justeMyStruct
que le type. C++ n'ont pas cette exigence; vous pouvez déclarerstruct MyStruct {};
et toujours utiliserMyStruct
que le type. L'application detypedef
dans ce contexte, c'est redondant.OriginalL'auteur Johannes Schaub - litb
Utilisation:
OriginalL'auteur mcorley
Vous avez déclaré un nouveau type : XEnumType. Vous devez créer un champ de ce type à l'intérieur de x de la classe.
.
Par exemple:
Ensuite, vous pouvez accéder à cette façon:
OriginalL'auteur Heisenbug
la ligne
définit un type appelé
XEnumType
, effectivement, c'est redondant de toute façon - préférez quelque chose comme:Maintenant, vous devez définir un membre de ce type dans votre classe
Dans votre constructeur, vous pouvez initialiser à ce que
OriginalL'auteur Nim
Permettez-moi d'abord d'assumer certaines conditions préalables:
x
est à partir d'une bibliothèque tierce et ne peut donc pas être changé.x
définit des constantes entières avec l'aide d'un enum.x
est censé être initialisé avec une des constantes deLINEAR
ouDIPARABOLIC
.Votre problème est que ces valeurs constantes sont déclarées dans la classe
x
. Donc, pour initialiser une instance dex
vous devez spécifier le champ d'application:Au lieu de
essayer
En spécifiant
x::
vous fournir le champ d'application de la constante.OriginalL'auteur Martin Hennings