Typdef enum

Signaler
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
salut tout le monde,

j'ai un problem dans la définition d'une valeure d'un type enumeré et de lui affecter une valeure:
le ty enumeré est le suivant
typedef enum
{
    KPDCDataTypeUnknown		= 0,    // This thing has no type!
    KPDCDataTypeBool        = 1,    // type code for a bool
    KPDCDataTypeInt32       = 2,    // type code for a 32-bit integer
    KPDCDataTypeString      = 3,    // type code for a string of 8-bit characters
    								//   attrSize will be 0 or (strlen(s)+1)
    KPDCDataTypeEnum        = 4,    // type code for an enum, represented in a 32-bit integer
    KPDCDataTypeByteBlock   = 5,    // type code for a block of bytes.
    KPDCDataTypeTime        = 6,    // type code for a time, seconds since Jan 1, 1970 or delta.
    KPDCDataTypeGroupSeparator = 7, // type code for a group separator.
    KPDCDataTypeInt32Array  = 8,    // type code for a 32-bit integer array
    KPDCDataTypeInt16Array  = 9,   // type code for a 16-bit integer array
    KPDCDataTypeFloat       = 10,   // type code for a floating point number
    KPDCDataTypeInt8        = 11,   // type code for an 8-bit integer
    KPDCDataTypeUInt8       = 12,   // type code for an unsigned 8-bit integer
    KPDCDataTypeInt16       = 13,    // type code for a 16-bit integer
    KPDCDataTypeUInt16      = 14,   // type code for an unsigned 16-bit integer
    KPDCDataTypeUInt32      = 15,   // type code for an unsigned 32-bit integer
    KPDCDataType4CharCode   = 16,   // type code for a four character code (Mac OSType)
                                    //      - same as unsigned long.
    KPDCDataTypeUInt16Array = 17,   // type code for an unsigned 16-bit integer array
    KPDCDataTypeRect		= 18,	// type code for KPDCRect ( four KPDCInt32 )
    KPDCDataTypeFloatArray	= 19,	// type code for an array of float
    
    KPDCDataTypes_end
} KPDCDataTypes;



moi par exemple je définir un variable valeure de type KPDCDataTypeEnum et de lui affecter la valeur 3 par exemple
comment faire merci

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
fait un cast :
KPDCDataTypes val = (KPDCDataTypes) 3;

à faire seulement si tu es sur de ce que tu affecte car tu perd l'intérêt des enum (obliger une valeur à rester dans un espace limité)
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

MERCI
mais le 3 désigne la valeur "3" ou "KPDCDataTypeString = 3"?
Messages postés
107
Date d'inscription
mardi 2 mars 2004
Statut
Membre
Dernière intervention
5 juillet 2004

JE T'explique j'ai à piloter une caméra. elle a une bibliothèque, moi je veux changer la valeure d'une propriété.
cette propriété peut prendre plusieures valeurs comme suit:

cameraexposuremode
R user enumerated (4 choises)
0=M
1=A
2=s
3=p

le changement de la propriété se fait par l'intermediaire d'une fonction de la librairie:

////////////////////////////////////////////////////////////////////////////////
//
//	Function:	KPDCSetAttributeValue
//
//	Description:
//	Set the value of the specified attribute ID
//
//	Parameters:
//		 In:	inRef  - a reference to an object that has the attribute.
//				inAttrID - the ID of an attribute of the object referred to by inRef.
//				inType - The type of the attribute.
//	 			inAttrSize - The size of the provided value buffer.
//				inAttrValue - The address of the attribute value.
//	Returns:	Any of the tool kit errors, KPDC_InvalidAttrIDErr
////////////////////////////////////////////////////////////////////////////////

KPDCENTRY KPDCStatus KPDCSetAttributeValue(	KPDCOpaqueRef	inRef,
KPDCAttributeID inAttrID,
KPDCDataType	inType,
KPDCUInt32		inAttrSize,
void*			inAttrValue);


le problem qui se pose c'est comment dire à la caméra de prendre la valeur 3 (=p) par exemple tout en spécifiant que le type de inAttrValue est "KPDCDataTypeEnum = 4, " et qu'on lui affecte la valeur "3 ou P"?
MERCI
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
j'ai pas trop pigé ce que tu souhaite faire mais voici un truc sur les enum :

quand tu déclare un type enuméré comme KPDCDataTypes, i ls'agit simplement d'un type entier dont les valeurs possibles appartiennent à un ensemble défini (celle de l'énumération).
les valeurs de l'énumération sont ainsi des constantes entières qui ne peuvent être affectées qu'a des variables du type de l'énumération. Ce principe permet au compilateur de vérifier que certaine varaibles ont toujours des valeurs "correctes".

en fait, tu pourrais très bien définir des constante avec des #define et les affectées ou les passer en paramètres aux fct mais dans ce cas, il n'y a pas de vérif de type de la part du compilo.

en fait je vient de relire ta question et "KPDCDataTypeEnum" n'est pas un type mais une valeur constante égale à 4. Toutes les valeurs de l'énumération aurait très bien pu être définies avec des #define
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
je crois que j'ai compris ton pb. En fait la fct de paramètrage permet de donner des paramètres ayant plusieur type (int, string...). le paramètre inType permet de spécifié ce type parmis une énumération de type possible.
parmis ces types possibles, il y a un qui s'appelle KPDCDataTypeEnum qui indique que le paramètres supplémentaires sera un entier 32 bits (qui pourra faire partie d'une autre énumération et apparemment 0, 1, 2 ou 3)

donc il te faut définir une nouvelle enum:
typedef enum
{
EMyEnum_M = 0,
EMyEnum_a = 1,
EMyEnum_s = 2,
EMyEnum_p = 3,
}MyEnum;

et appeler la fct avec :
KPDCDataType inType = KPDCDataTypeEnum;
int value = EMyEnum_p;
KPDCSetAttributeValue(inRef, inAttrId, inType, sizeof(value), &value);