Erreur : Invalid struct or union type [Résolu]

Signaler
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012
-
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012
-
Bonjour,

Voila , en ce moment je m’arrache les cheveux sur une allocation dynamique d'une structure en mémoire.

Voici mes variable et structure que j'ai declaré dans mon .h :

typedef struct tLightActuatorData
{
unsigned short usLuxTarget;
unsigned short usSwitchOnLevel;
unsigned char  ucControlerStartAt;
unsigned char  ucSwitchOffDelay; 
unsigned char  ucScene1;
unsigned char  ucScene2;
unsigned char  ucScene3;
unsigned char  ucScene4;
unsigned char  ucScene5;	

} LightActuatorData;

extern unsigned char  *far *Actuator_1_struct;


Dans mon main j’initialise Actuator_1_struct :

	Actuator_1_struct = calloc ( 1 , sizeof(unsigned char) );


et j’appelle ma fonction :

        if (Actuator_1_Settings.bit.bActuatorFunctionChanged == TRUE)
{	
Actuator_1_struct = realloc(Actuator_1_struct, sizeof(struct tLightActuatorData));
}
if ( Actuator_1_Settings.bit.bKindCommand == LIGHT_ONOFF)
{
        Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];
}


Mais j'obtiens une erreur dans la dernière ligne qui est :

[Error(ccom)] invalid struct or union type


Quelqu’un pourrai m'aider ?

Merci

8 réponses

Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

erf trompé de balise désolé
LightActuatorData* StructArray = (LightActuatorData*)Actuator_1_struct;
StructArray[0].ucScene1 = aucSondeParam[KNX_EO_PARM_9_ACTUATOR_1];
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Salut.
Actuator_1_struct = calloc ( 1 , sizeof(unsigned char) );

ça ne suffit pas pour ta struct... elle doit faire
sizeof(LightActuatorData)

non?
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012

Non ça ne change rien.

Par contre je doute que le problème viens d'ici. En effet peut importe la taille au debut du programme puisque je fais un realloc à la taille souhaité par la suite.

J'ai faux ?
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Non c'est bien ça..
Du coup il manque un peut de code pour avoir une vue plus claire du soucis...
Et quand tu dis:
Mais j'obtiens une erreur dans la dernière ligne

Quelle ligne exactement?
        if (Actuator_1_Settings.bit.bActuatorFunctionChanged == TRUE)//ici?
{	
Actuator_1_struct = realloc(Actuator_1_struct, sizeof(struct tLightActuatorData));//ici?
}
if ( Actuator_1_Settings.bit.bKindCommand == LIGHT_ONOFF)//ici?
{
        Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];//ici?
}
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012

dans celle la :

 Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Bon il faut que tu cast ton unigned char avant de l'utiliser.
LightActuatorData* StructArray = (LightActuatorData*)Actuator_1_struct;
StructArray[0].ucScene1 = aucSondeParam[KNX_EO_PARM_9_ACTUATOR_1];

Et ça devrait marcher
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012

Merci ne t'inquiète pas pour les balise j'avais très bien compris je testerais le code demain.
Messages postés
55
Date d'inscription
mercredi 3 janvier 2007
Statut
Membre
Dernière intervention
21 février 2012

Alléluia,ça fonctionne merci pour tous !