Initialisation d'une strucutre contenant une union

Initialisation d'une strucutre contenant une union - C - Programmation

Marsh Posté le 29-11-2004 à 21:13:55    

Bonjour,
 
Je me retrouve avec un probleme d'initialisation d'une structure contenant une union : j'arrive a initaliser une variable ayant pour type une strucutre tant que j'utilise pas d'union dans cette structure.
 
Voici la definition de ma structure :

Code :
  1. typedef struct{
  2. union
  3. {
  4. u08  entier[4];
  5. float  flottant;
  6. }  abc;
  7. float  min;
  8. float  max;
  9. float  inc;
  10. }param


 
Et voici comment j'initialise ma variable :

Code :
  1. param ABC = {0,1,300,1};


 
Et voici les warning que me donne mon compilateur :

Code :
  1. warning: missing braces around initializer
  2. warning: (near initialization for `ABC')
  3. warning: large integer implicitly truncated to unsigned type


 
Merci de la precieuse aide que vous pourriez me donner.
 
Max

Reply

Marsh Posté le 29-11-2004 à 21:13:55   

Reply

Marsh Posté le 29-11-2004 à 21:33:15    

il me semble que c'est ca :

Code :
  1. TParam p = { {{0,0,0,0}}, 1, 300, 1};

Reply

Marsh Posté le 29-11-2004 à 21:59:15    

je vien d'essayer ta suggestion theShOcKwAvE, mais ca me retourne la meme erreur.
 
j'ai meme essayé avec des parentheses, des crochets ..., rien a faire !!!

Reply

Marsh Posté le 29-11-2004 à 22:15:06    

Ça devrait être bon. Chez moi ça marche sans avertissements avec :
 
param ABC = { { {0.0} }, 1, 300, 1};
 
ou :
 
param DEF = { { {0, 0, 0, 0} }, 1, 300, 1};

Reply

Marsh Posté le 29-11-2004 à 22:24:47    

Je suis vraiment naze, dans mon exemple chez moi j'utilisais un tableau (ABC[1]) du coup fallait juste rajouter un couche d'accolade a vos solutions.
 
Merci beaucoup,
 
Max

Reply

Marsh Posté le 29-11-2004 à 22:37:26    

blurk a écrit :

Ça devrait être bon. Chez moi ça marche sans avertissements avec :
 
param ABC = { { {0.0} }, 1, 300, 1};
 


 
fais gaffe c'est pas standard, une union doit etre initialisée avec une valeur du type du premier membre

Reply

Marsh Posté le 01-12-2004 à 21:33:53    

kineton a écrit :

Bonjour,
 
Je me retrouve avec un probleme d'initialisation d'une structure contenant une union : j'arrive a initaliser une variable ayant pour type une strucutre tant que j'utilise pas d'union dans cette structure.
 


Ceci fonctionne:


typedef unsigned int u08;
 
typedef struct
{
   union
   {
      u08 entier[4];
      float flottant;
   }
   abc;
   float min;
   float max;
   float inc;
}
param;
 
int main (void)
{
   param ABC =
   {
      {{0, 1, 300, 1}},
      0,0,0
   };
 
   return 0;
}

Reply

Marsh Posté le 02-12-2004 à 11:27:02    

Hello Emmanuel et bienvenue ici ! :hello:
Note que tu as la balise cpp au lieu de code qui colorise ton code.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-12-2004 à 12:26:45    

[:roi]
j'ai plus qu'à fermer ma gueule

Reply

Marsh Posté le 02-12-2004 à 12:56:26    

HelloWorld a écrit :

Hello Emmanuel et bienvenue ici ! :hello:
Note que tu as la balise cpp au lieu de code qui colorise ton code.


Merci de ton accueil.
 
Je préfère éviter les balises 'cpp' ou alors, il faudrait m'indiquer un moyen de désactiver la numérotation des lignes que je trouve peu pratique. J'ai en effet l'habitude de copier/coller le code posté pour le tester. Si il faut retirer les numéros de lignes (j'ai fait l'essai) à chaque fois, je risque d'abandonner assez vite...
 
Nota : j'ai utilisé 'fixed' et non 'code'.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 02-12-2004 à 12:58:53

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 02-12-2004 à 12:56:26   

Reply

Marsh Posté le 02-12-2004 à 12:58:23    

Emmanuel Delahaye a écrit :

Si il faut retirer les numéros de lignes (j'ai fait l'essai) à chaque fois, je risque d'abandonner assez vite...


 
Nan, tu cliques sur le bouton edit du message où se trouve le code, et tu copies/colles le contenu du message entre les balises cpp. C'est pas génial, mais c'est pas la mort non plus...
 
M'enfin, bienvenue ici. Fais pas gaffe à Taz, c'est un étudiant qu'on a pour quelques mois, il apprend encore. :whistle:


Message édité par Lam's le 02-12-2004 à 12:59:32
Reply

Marsh Posté le 26-12-2007 à 19:32:22    

Grrr, j'arrive pas à utiliser ma structure :

Code :
  1. typedef struct {
  2.  int type;
  3.  union {
  4.   int dwData;
  5.   char* strData;
  6.  } data;
  7. } Param;
  8. Param params0 = { 1, { "test" } };


 

error: invalid conversion from 'const char*' to 'int'


 
J'ai essayé aussi :

Code :
  1. Param params0 = { .type = 1, .data = { "" }; };


Pas mieux :

error: expected primary-expression before '.' token
error: expected primary-expression before '.' token
error: expected primary-expression before '{' token
error: expected `}' before '{' token
error: expected ',' or ';' before '{' token

Message cité 1 fois
Message édité par Olivier51 le 26-12-2007 à 20:18:33
Reply

Marsh Posté le 26-12-2007 à 19:52:04    

Emmanuel Delahaye a écrit :


Merci de ton accueil.
 
Je préfère éviter les balises 'cpp' ou alors, il faudrait m'indiquer un moyen de désactiver la numérotation des lignes que je trouve peu pratique. J'ai en effet l'habitude de copier/coller le code posté pour le tester. Si il faut retirer les numéros de lignes (j'ai fait l'essai) à chaque fois, je risque d'abandonner assez vite...
 
Nota : j'ai utilisé 'fixed' et non 'code'.


 
avec un double click sur le code les lignes disparaissent

Reply

Marsh Posté le 26-12-2007 à 21:16:54    

morph a écrit :


 
avec un double click sur le code les lignes disparaissent


Je sais pas si tu as remarqué mais son message date d'il y a 3 ans.

Reply

Marsh Posté le 27-12-2007 à 20:21:57    

Olivier51 a écrit :

Grrr, j'arrive pas à utiliser ma structure :

Code :
  1. typedef struct {
  2.  int type;
  3.  union {
  4.   int dwData;
  5.   char* strData;
  6.  } data;
  7. } Param;
  8. Param params0 = { 1, { "test" } };


 

error: invalid conversion from 'const char*' to 'int'


 
J'ai essayé aussi :

Code :
  1. Param params0 = { .type = 1, .data = { "" }; };


Pas mieux :

error: expected primary-expression before '.' token
error: expected primary-expression before '.' token
error: expected primary-expression before '{' token
error: expected `}' before '{' token
error: expected ',' or ';' before '{' token



 :bounce:

Reply

Marsh Posté le 28-12-2007 à 03:25:10    

matafan a écrit :


Je sais pas si tu as remarqué mais son message date d'il y a 3 ans.


N'empêche que je viens de découvrir le truc du double click, alors, pour moi, ce n'est pas inutile !
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 28-12-2007 à 03:25:58    

morph a écrit :


 
avec un double click sur le code les lignes disparaissent


Merci pour cette astuce bien pratique.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 28-12-2007 à 08:28:49    

Emmanuel Delahaye a écrit :


Merci pour cette astuce bien pratique.
 


Les Joce bugs^Wfeatures faut pas chercher à comprendre

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed