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++) Déclaration préliminaire de struct

[exit]
[exit]
Niveau 5
28 janvier 2006 à 17:20:31

Dans un projet, je suis amené à créer deux structures (au sens C++ du terme, pas C) possédant chacune un pointeur vers une structure de l´autre type.
Le problème, c´est que le compilateur refuse de compiler, me disant que l´autre structure n´existe pas quand j´initialise la première.

J´ai essayé de placer un :

struct LautreStructure;

avant :

struct Lastructure
{
LautreStructure *ptr;
};

Mais ca ne fonctionne pas...

Je précise que mes 2 structures sont définies dans le même fichier *.cpp.
Comment faire ?

[exit]
[exit]
Niveau 5
28 janvier 2006 à 19:19:21

Bon j´ai changé l´orde déclaration des 2 classes, juste pour voir, ainsi que le struct ...;
Pour qu´il corresponde à l´autre classe et ca marche.
Assez surprenant...

dnob700
dnob700
Niveau 10
28 janvier 2006 à 20:17:22

Ce qu´il faut faire (et que tu as fait je suppose) c´est :

struct A;

struct B
{
A* ptr;
};
struct A
{
B* ptr;
}

ou le contraire (remplacer A par B et vice versa).

Si ça ne marchait pas, c´est probablement que tu as oublié quelque chose. Comme tu n´a pas mis le code en entier, on ne peut pas savoir.

lag-it
lag-it
Niveau 10
29 janvier 2006 à 12:57:50

J´ai déjà rencontré ce cas de figure avec un machin du genre de celui de dnob700 :

struct A;

struct B
{
A* ptr;
};

struct A
{
B* ptr;
}

Avec un erreur à la compilation.
Dans mon cas, la déclaration de la structure A comportait une erreur, mais Visual C++ ne m´affichait aucun message relatif à cette dernière : VC++ n´a pas l´air de bien gérer ce cas de figure (du point de vue de l´affichage des erreurs de compilation)

godrik
godrik
Niveau 30
29 janvier 2006 à 13:48:55

mmm, VC++ 6 gerait ca tres bien... (pas comme tout d´ailleurs, mais bon...)

lag-it
lag-it
Niveau 10
29 janvier 2006 à 14:51:45

Attention : j´ai dit que VC++ ne le gérait pas très bien en terme de messages d´erreur.
Le système de déclaration préliminaire ne pose bien sûr aucun problème au compilateur.

Le problèmes, si on reprends l´exemple de dnob, c´est dans le cas ou la déclaration de la structure A comporte une erreur : j´ai l´impression que VC++ n´affiche pas le message correspondant au problème au sein de la structure A, il se contente de dire que la structure B n´a pas pu être créée, parce que A n´existe pas.
Je peux me tromper, mais j´ai déjà rencontré ce cas de figure où, en inversant l´ordre des déclarations et en corrigeant l´erreur non signalée, le problème était résolu.

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