IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

union de structure syntaxe


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    asdfsdf
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : asdfsdf

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut union de structure syntaxe
    Salut,

    J'ai trouvé un exemple d'union de struct dans un cours mais il semblerait qu'il y ait une faute. Mais je ne vois pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    typedef enum { ENTIER, REEL} TypeNombre ;
     
    typedef struct {
    		const TypeNombre type=ENTIER ; 
    		int isPremier; /* vaut 0, ou 1 selon le nb */ 
    		int value ;
    } Entier ;
     
    typedef struct {
    		const TypeNombre type=REEL ;
    		int isRatio; /* vaut 0, 1 selon le nb */ 
    		float value ;
    } Reel ;
     
    typedef union {
    		Entier entier ;		/* si c’est un entier */
    		Reel reel ;		/* si c’est un reel */
    } Nombre ;
    Nombre  nb;
    Lorsque que j'essaie de compiler, dev-C++ me dit au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const TypeNombre type=REEL
    :
    [Warning] no semicolon at end of struct or union
    syntax error before '=' token

    Merci d'avance A++

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Il y a un point virgule qui traine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int isRatio; /* vaut 0, 1 selon le nb */ ;

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Enlève les valeurs données à type dans les définitions de structures, de toutes façon, si on réfléchit bien, elle sont inutiles puisue tu définis deux types différents, Entier et Reel, forcement pour la structure de nom Entier le type sera Entier et pour la structure de nom Reel le type sera reel.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Candidat au Club
    Profil pro
    asdfsdf
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : asdfsdf

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par DaZumba
    Il y a un point virgule qui traine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int isRatio; /* vaut 0, 1 selon le nb */ ;
    Oui j'avais vu mais j'ai oublié de l'enlever au copier coller.


    En fait, j'aimerais laisser le champ "type" pour pouvoir faire ca ensuite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch(nb.type) {
    		case ENTIER :  on peut accéder à nb.entier.xxx ;
    					 break ;
    		case REEL : 	accès à  nb.reel.yyy ; 
    					break ;
    }
    ou bien comment est ce que je peux connaitre le type de nb ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct
    {
      TypeNombre type;
      union
      {
        Entier entier ;		/* si c’est un entier */
        Reel reel ;		/* si c’est un reel */
      } ;
    } Nombre ;
    Je n'ai pas testé, il y a peut-être une erreur de syntaxe, mais c'est l'idée, c'est la strucutre nombre qui doit connaître le type.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Candidat au Club
    Profil pro
    asdfsdf
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : asdfsdf

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    ah ouais j'avais pas pensé. merci je vais le tester

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
     
    typedef enum { ENTIER, REEL} TypeNombre ;
     
    typedef struct {
    		int isPremier; /* vaut 0, ou 1 selon le nb */ 
    		int value ;
    } Entier ;
     
    typedef struct {
    		int isRatio; /* vaut 0, 1 selon le nb */
    		float value ;
    } Reel ;
     
    typedef struct
    {
      TypeNombre type;
      union
      {
        Entier entier ;		/* si c’est un entier */
        Reel reel ;		/* si c’est un reel */
      };
    } Nombre ;
     
    int main(void)
    {
    	Nombre  nb1, nb2;
     
    	nb1.type = ENTIER;
    	nb1.entier.isPremier = 0;
    	nb1.entier.value = 10;
    	nb2.type = REEL;
    	nb2.reel.isRatio = 0;
    	nb2.reel.value = 10.0;
    	printf("%d\n", nb1.entier.value);
    	printf("%f\n", nb2.reel.value);
    	return 0;
    }
    Ceci fonctionne bien.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête d'union: problème de syntaxe ?
    Par smilm dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/01/2011, 18h16
  2. Unions et structures de données
    Par sperca dans le forum Débuter
    Réponses: 3
    Dernier message: 08/05/2009, 20h12
  3. Syntaxe Select Union
    Par Oncle_Pete dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2007, 13h20
  4. Structure, union et pointeur
    Par kikoo.plop dans le forum C
    Réponses: 10
    Dernier message: 18/12/2006, 19h21
  5. [Syntaxe]Décalration de structure
    Par ronan99999 dans le forum C
    Réponses: 6
    Dernier message: 27/11/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo