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 :

Problème de structure "récursive"


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Problème de structure "récursive"
    Bonjour, je voudrais savoir comment déclarer un champ d'une structure comme étant cette structure elle-même.

    Par exemple, comment donner un champ Planète à la structure Planète, qui désignerait par exemple sa planète voisine ?

    J'y arrive en déclarant un pointeur vers cette structure, mais pas en déclarant une variable simple vers cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct Planete{
        float masse;
        struct Planete *voisine;
    }Planete;
    fonctionne, mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct Planete{
        float masse;
        struct Planete voisine;
    }Planete;
    me donne l'erreur "field 'voisine' has incomplete type".

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    La première solution est la seule possible et aussi la plus logique, si une planete n'a pas de voisine que fait tu dans la deuxième solution ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par PRomu@ld
    La première solution est la seule possible et aussi la plus logique, si une planete n'a pas de voisine que fait tu dans la deuxième solution ?
    -> perte mémoire.

    Et si chaque planète avait une voisine...

    Il est vrai que l'utilisation d'un pointeur est pratique, mais la 2e solution n'est-elle vraiment pas possible ?? Ca m'étonne quand même.

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Non, ça n'est pas possible.

    Une structure doit avoir une taille précise pour être instanciée, si elle est récursive sans passer par un pointeur, le compilateur ne peut pas calculer la taille de la structure, et donc impossible de compiler.

    En revanche, si tu passes par un pointeur, la taille peut être calculée (le pointeur a une taille prédictible).

    Voilà pourquoi la deuxième solution ne peut pas être possible.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Oui c'est vrai qu'en réfléchissant un peu...

    merci

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    On obtiendrait une planète qui contient une planète qui contient une planète... ça nous remplit vite la mémoire
    (cette structure aurait une taille infinie...)

Discussions similaires

  1. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 11h47

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