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 :

Structures imbriquées avec malloc


Sujet :

C

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Structures imbriquées avec malloc
    Bonjour tout le monde,

    Je suis complètement perdu.

    Je dois créer une structure imbriquée qui va contenir :

    Le type d'une planete (sera toujours P), Le nom de cette planète (sera un char pointeur car on travaillera avec malloc pour allouer de la mémoire pour la variable qui va accueillir le nom de la planète) et le rayon de cette planète.

    ça c'est pour la première strucutre.

    La seconde devra reprendre la première et le type de la Lune (qui sera toujours L) son nom (char pointeur car on va utiliser malloc) et le rayon (double).

    Nous ne sommes pas censé savoir combien il y'aura de Planeètes au départ et combien de lunes constitueront ces planètes, il faut donc faire tout cela en pointeur (je pense).

    Voici exactement ce que demande l'énoncé :

    - un tableau de planètes, où chaque planète y est décrite par :
    - un nom
    - un rayon (en km)
    - un tableau de lunes, où chaque lune y est décrite par :
    - un nom
    - un rayon (en km)
    J'ai créé ceci mais je ne pense pas être dans le bon chemin :

    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 struct 
    {
    	char TypeP;
    	char* Nom;
    	double km;
     
    }planets;
     
    typedef struct
    {
    	planets PlanetDescription;
    	char TypeL;
    	char* NomLune;
    	double kmLune;
    }Lunes;
     
    typedef struct
    {
    	Lunes* Planete;
    }PlanetesEtLunes;
    Je continue à chercher,merci d'avance pour votre aide.

    beeges

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Il manque le tableau de lune dans la structure planète.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Merci pour ta réponse.

    Le tableau Lune est ici ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
    	planets PlanetDescription;
    	char TypeL;
    	char* NomLune;
    	double kmLune;
    }Lunes;

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    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
    typedef struct
    {
    	double kmLune;
    	char * NomLune;
            char TypeL;
    }Lunes;
     
    typedef struct 
    {
    	double km;
            char * Nom;  
            Lunes * tabLunes;
            char TypeP;
    }planets;

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct
    {
    	double kmLune;
    	char * NomLune;
            char TypeL;
    }Lunes;
     
    typedef struct 
    {
    	double km;
            char * Nom;  
            Lunes * tabLunes;
            char TypeP;
    }planets;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
    	double rayon;
    	char * Nom;
            char type;
    }t_objetStellaire;
     
    typedef struct {
            t_objetStellaire planete
            t_objetStellaire *tabLunes;
    }t_planets;
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Merci à vous deux pour vos réponses.

    J'obtiens des résultats différents dans le débugueur :

    Nicolas :

    voir image Nicolas.jpg

    Sve@r, voir image Svear.jpg

    Je pense que c'est la structure de Svear qui est la plus adaptée ?

    Merci encore à vous deux pour votre dévouement.

    beegees

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beegees Voir le message
    Merci à vous deux pour vos réponses.

    J'obtiens des résultats différents dans le débugueur :

    Nicolas :

    voir image Nicolas.jpg

    Sve@r, voir image Svear.jpg

    Je pense que c'est la structure de Svear qui est la plus adaptée ?

    Merci encore à vous deux pour votre dévouement.

    beegees
    J'ai tapé ma structure sans vraiment réfléchir. Mais il est certain qu'il y aura de l'allocation à faire avant de s'en servir. A la limite on peut remplacer "char *Nom" par "char nom[20]". Ca limite un peu le truc mais ça évite d'avoir à s'enquiquiner à gérer l'allocation/libération du nom.
    En ce qui concerne le tableau de lunes là on pourra pas se passer de faire du malloc pour stocker les "n" lunes d'une planète. Ou alors on se fixe là aussi une limite (par exemple 20) et on remplace "t_objetStellaire *tabLune" par "t_objetStellaire tabLune[20]"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
    	double rayon;
    	char * Nom;
            char type;
    }t_objetStellaire;
     
    typedef struct {
            t_objetStellaire planete
            t_objetStellaire *tabLunes;
    }t_planets;
    il y a encore plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;          
    } objetStellaire;
     
    objetStellaire *planets; /* ou objetStellaire planets[10] */

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    il y a encore plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            struct p_objetstellaire *lunes ;          
    } t_objetStellaire;
    
    t_objetStellaire *planets; /* ou t_objetStellaire planets[10] */
    Une structure récursive ! Ca permettra à une planète soit de gérer un tableau de lunes, soit une liste chaînée de lunes ! Joli coup !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Une structure récursive ! Ca permettra à une planète soit de gérer un tableau de lunes, soit une liste chaînée de lunes ! Joli coup !!!
    et surtout ça permettra d'avoir une seule routine pour gérer que ce soit des planètes ou des lunes (qui peuvent éventuellement avoir elles-mêmes des lunes...)... : cree_objet (...) add_lune_to_objet (...)

  11. #11
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    il y a encore plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;          
    } objetStellaire;
     
    objetStellaire *planets; /* ou objetStellaire planets[10] */
    Hum, ça compile en C chez vous ? Personnellement, quand une structure s'autoréférence, j'utilise ça, parmi d'autres solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct s_objetstellaire p_objetstellaire;
     
    struct s_objetstellaire {
    	double rayon;
    	char * Nom;
        char type;
        p_objetstellaire* lunes ;          
    };

  12. #12
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    et surtout ça permettra d'avoir une seule routine pour gérer que ce soit des planètes ou des lunes (qui peuvent éventuellement avoir elles-mêmes des lunes...)... : cree_objet (...) add_lune_to_objet (...)
    D'abord, sur le fond, je suis tout à fait d'accord avec la solution générale par rapport à la solution spécifique, c'est à dire spécifier un objet céleste quelconque. Je n'aurais d'ailleurs pas fait autrement, à ceci près que je ne vois pas l'intérêt du champ type à part s'il est rendu obligatoire par l'énoncé.
    Simplement, il ne semble pas qu'il soit possible d'avoir de façon stable des satellites de satellites. En tout cas on n'en a pas d'exemple, à part des objets temporaires comme le furent les orbiters Apollo. Il existe des objets troyens, mais si j'ai bien compris, ils sont attachés au couple planète - satellite.
    En revanche, les planètes extrasolaires, ou exoplanètes, dont le catalogue commence à s'étoffer, justifie la généralisation. On aurait alors une hiérarchie:
    - Univers
    - Étoile (Soleil)
    - Planète (Terre)
    - Satellite (Lune)

  13. #13
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Bonjour,

    Effectivement, la première idée est un truc du genre:
    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
    typedef struct s_objetcCeleste objetCeleste;
     
    struct s_objetcCeleste {
    	char* nom;
    	double rayon;
    	objetCeleste* objetMere;
    };
     
     
    int main(void) {
    	objetCeleste Terre    = {"Terre", 6378.0, NULL};
    	objetCeleste Lune     = {"Lune", 1735.0, &Terre};
    	printf("%s   %s   %s\n", Terre.nom, Lune.nom, Lune.objetMere->nom);
    	return EXIT_SUCCESS;
    }
    Le problème, c'est qu'ainsi le programme ne sert à rien, ou si peu. Et c'est ballot, même pour un exercice. Il faut dès le début de l'analyse envisager la vie des données, c'est à dire la saisie, l'édition, mais surtout la persistence, donc la sérialisation, c'est à dire l'écriture sur disque et la lecture.
    Dans votre contexte, on n'utilisera pas, j'imagine, de bibliothèque toute faite. On pourra sauver les données dans un fichier texte[1]. Si on conserve le float ou le double pour le champ rayon, on passera par sprintf() et sscanf() pour lire et écrire. Si le rayon n'est qu'une indication, il pourrait également être conservé comme du texte.
    Là, il est clair que les pointeurs vont nous emmerder, au mieux nous compliquer la vie. Alors pourquoi ne pas remplacer ce pointeur par l'indice de l'objet-mère dans le tableau de objetCeleste ? On arrive à un truc comme:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <float.h>
     
    typedef struct s_objetcCeleste objetCeleste;
     
    struct s_objetcCeleste {
    	const char* nom;
    	double rayon;
    	int objetMere;
    };
     
    int main(void) {
    	int i;
    	objetCeleste Systeme[] = {
    			            {"Univers", DBL_MAX, -1}
    	                          , {"Soleil", 1000000.0, 0}
    	                          , {"Terre",     6378.0, 1}
    	                          , {"Lune",      1735.0, 2}
    	                          };
    	for(i =0; i < sizeof Systeme / sizeof(objetCeleste); i++){
    		printf("%s  %lf  %s\n", Systeme[i].nom
    				              , Systeme[i].rayon
    				              , (Systeme[i].objetMere >= 0 ? 
    				            		  Systeme[Systeme[i].objetMere].nom 
    				            	    : "Niveau 0 !"));
    	}
    	return EXIT_SUCCESS;
    }
    Bien entendu, à la place de l'indice, on peut envisager d'utiliser un identifiant (numérique) unique. On imagine sans peine ce qui est facilté alors (la maintenance, particulièrement la destruction d'un objet), et ce qui est compliqué (tout le reste, en particulier l'accès simple). Je préfère l'indice, mais c'est éventuellement discutable.
    Il vous restera avant d'écrire les routines de sausie, de sérialisation, d'allocation, etc. à structurer ces objets. Première approche, tout mettre dans un seul tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct systemeComplet {
    	int nbreObjets;
    	objetCeleste* objets;
    };
    Ou alors, pour en revenir à l'idée du champ type, spécialiser une liste de planètes et une liste de satellites. Mais s'il n'y a pas de contrainte d'énoncé d'exercice, je préfère la première approche.
    Un exemple d'utilisation, dans la hiérarchie Univers - Planète - Satellite: la liste des satellites de la planète P d'indice n est la liste des objets dont le champ objetMere vaut n. Pour a liste globale des satellites:
    - Soit on obtient la liste des planètes, comme ci-dessus, puis pour chacune la liste de ses satellites.
    - Soit c'est la liste des objets dont le champ objetMere de l'objet d'indice objetMere vaut 0 (plus facile à coder qu'à écrire en français).
    Voilà, à vous de voir...

    [1] On peut sauver le tableau d'objets sous forme binaire, mais vous pourriez avoir des problèmes de portabilité. Et il faudra traiter les chaînes des champ nom. Bref, c'est intéressant de tout faire en texte, il faut de toutes façon savoir le faire.

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    • Citation Envoyé par Pierre Maurette Voir le message
      Hum, ça compile en C chez vous ?


      c'est la définition même, dans le K&R :

      As a more complicated example, we could make typedefs for the tree nodes shown earlier in this chapter:
      typedef struct tnode *Treeptr;
      typedef struct tnode { /* the tree node: */
      char *word; /* points to the text */
      int count; /* number of occurrences */
      struct tnode *left; /* left child */
      struct tnode *right; /* right child */

      } Treenode;
      This creates two new type keywords called Treenode (a structure) and Treeptr (a pointer to the structure).

    • Citation Envoyé par Pierre Maurette
      , à ceci près que je ne vois pas l'intérêt du champ type à part s'il est rendu obligatoire par l'énoncé.
      bah peut-être, je n'ai pas regardé le contenu de la structure, mais sa forme..

      Et d'autre part le type pourrait être utile pour lister par exemple tous les objets de catégorie 1, ou 2, etc..


    • Citation Envoyé par Pierre Maurette
      Là, il est clair que les pointeurs vont nous emmerder, au mieux nous compliquer la vie. Alors


      Pourquoi ça ?? ça permet des listes chaînées, une utilisation minimale de la mémoire, et c'est courant en C...

  15. #15
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Je renouvelle la question, de savoir si ça compilait chez vous. Le code était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;          
    } objetStellaire;
     
    objetStellaire *planets; /* ou objetStellaire planets[10] */
    Et est-ce que ça ne compile pas mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            struct p_objetstellaire *lunes ;          
    } objetStellaire;
     
    objetStellaire *planets; /* ou objetStellaire planets[10] */
    ?
    C'est juste une question, hein...

    Pour le reste, la réponse, c'est quand vous écrivez vos pointeurs dans un fichier que vous rechargez.

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pierre Maurette Voir le message
    Je renouvelle la question, de savoir si ça compilait chez vous. Le code était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;          
    } objetStellaire;
     
    objetStellaire *planets; /* ou objetStellaire planets[10] */
    C'est juste une question, hein...
    et ma réponse est "BIEN SUR", cela correspond aux normes C89, C90, C99...

    (si pas convaincu, voir norme C99 chapitre 6.5)

    Et je n'utilise QUE cette notation quasi partout..

    L'autre forme est uniquement la pré-déclaration de l'identifiant (tag)..



    Citation Envoyé par Pierre Maurette Voir le message
    Pour le reste, la réponse, c'est quand vous écrivez vos pointeurs dans un fichier que vous rechargez.


    mais encore ??

    A moins de vouloir sauvegarder en binaire (ce qu'à Dieu ne garde), que ce soit l'une ou la'autre forme c'est identique, et c'est à mon avis beaucoup plus simple avec les pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sauve_Planete ( objetStellaire *objet, FILE *f )
    {
    }

  17. #17
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    hum ca compile pas chez moi sans le mot clé struct dans ma structure récursive

  18. #18
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    et ma réponse est "BIEN SUR", cela correspond aux normes C89, C90, C99...
    Euh, la reponse est BIEN SUR QUE NON (pour reprendre ta typographie). Le nom du typedef n'est pas encore defini, donc ne peut pas etre utilise. L'etiquette de la structure, par contre, existe. Il manque donc le mot-cle struct.

  19. #19
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Je réponds encore une fois à ce cher souviron34, le biterrois que je suis ne souhaitant pas que la discussion s'envenimât ;-)
    Je peux me tromper mais il me semble que vous n'essayez pas le code que vous proposez, peut-être n'avez-vous pas de compilateur à votre disposition sur l'heure ? Je ne peux me résoudre à l'idée que vous seriez de mauvaise foi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;          
    } objetStellaire;
    Si ce code compile, c'est à mon avis un hasard, voire une erreur du compilateur. Pour que "p_objetstellaire *lunes ;" compile, il faudrait que p_objetstellaire soit typedef-é, ce qui n'est pas le cas. p_objetstellaire est déclaré comme une structure. C'est exactement comme si vous écriviez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct p_objetstellaire {
    	double rayon;
    	char * Nom;
            char type;
            p_objetstellaire *lunes ;// Pas bon,  "struct p_objetstellaire *lunes;" bon         
    };
    Soyez gentil, ne me répétez pas que ça compile chez vous sans le type et la version de votre compilateur et un code minimal complet.

    Pour la sauvegarde des tableaux de structures contenant des pointeurs, j'imagine que vous plaisantez. Il n'y a aucune raison que les pointeurs soient les mêmes quand vous rechargerez. Eventuellement des offsets seront le mêmes, mais sauver des offsets dans un tableau, c'est quoi d'autre que de sauver des indices. N'est-ce pas ?

    Pierre

  20. #20
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oh pour le struct avant ? J'avais pas vu

    oui bien sur... c'est un oubli...

    mais mes remarques etaient par rapport a la pre-declaration...

Discussions similaires

  1. [XSLT 2.0] Passage xml avec structure imbriquée en xml structure plate avec rupture
    Par Yann F-FLYC dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 29/10/2014, 11h30
  2. Réponses: 6
    Dernier message: 12/04/2007, 13h58
  3. Réponses: 2
    Dernier message: 21/03/2007, 10h55
  4. structure imbriquée malloc problème
    Par tuxout dans le forum C
    Réponses: 3
    Dernier message: 26/02/2007, 06h49
  5. Malloc / structures imbriquées
    Par Lolita59 dans le forum C
    Réponses: 14
    Dernier message: 11/05/2006, 15h43

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