CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Structures s'utilisant mutuellement

KheySurWallah
KheySurWallah
Niveau 6
22 janvier 2016 à 02:30:00

Salut.
J'essaie de créer des structures qui s'utilisent mutuellement mais gcc n'apprécie pas. J'ai un peu retourné le code dans tous les sens mais pas moyen de trouver la solution. Pour y voir plus clair voilà le code

struct Element{
  struct Arbre val;
  struct Element* suiv;
};
typedef struct Element* Liste;

struct Arbre{
  struct Arbre* pere;
  Liste fils;
};
typedef struct Arbre Arbre;

En gros j'aimerais utiliser Element dans Arbre et Arbre dans Element, si quelqu'un a la solution ce serait vraiment cool

drakenlorde
drakenlorde
Niveau 9
22 janvier 2016 à 03:21:42

1, si tu veux utiliser une struct dans une autre struct qui est définie plus haut, tu dois déclarer d'avance la deuxième struct car la struct en haut ne reconnait pas l'existance d'une struct pas encore déclarée.


struct Arbre; // <- En anglais, on appelle ça forward declaration
struct Element{
  struct Arbre val;
  struct Element* suiv;
};
typedef struct Element* Liste;

struct Arbre{
  struct Arbre* pere;
  Liste fils;
};
typedef struct Arbre Arbre;

2, le prochain problème est lié au fait que le membre val de la struct Element ne peut pas être déclaré localement car la struct Arbre n'a pas encore de définition alors val ne sait pas combien de mémoire lui réserver. Ce problème ce règle simplement en fesant un pointeur sur Arbre et tu va devoir faire l'allocation de mémoire plus tard.

struct Arbre;
struct Element{
  struct Arbre* val; // val est un pointeur et non une variable locale
  struct Element* suiv;
};
typedef struct Element* Liste;

struct Arbre{
  struct Arbre* pere;
  Liste fils;
};
typedef struct Arbre Arbre;

Avec ces 2 corrections, ça compile sur GCC.

Message édité le 22 janvier 2016 à 03:25:46 par drakenlorde
LEpigeon-888
LEpigeon-888
Niveau 12
22 janvier 2016 à 06:51:23

drakenlorde, du coups ça serait plus logique d'inverser arbre et élément et de faire une forward déclaration d'élément non ? Comme arbre ne contient de toute façon qu'un pointeur vers élément ?

drakenlorde
drakenlorde
Niveau 9
22 janvier 2016 à 17:45:16

Absolutement, bonne remarque.

fatimamafemme
fatimamafemme
Niveau 5
23 janvier 2016 à 23:07:03

je te conseille fortement le c++. J'ai longtemps dev en C et à force de devoir faire des malloc (surtout sur les tables à deux dimensions) ou des structures, je n'arrivais plus à gérer toutes les erreurs...

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment