Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme d'appel de variable séparé dasn plusieur fichier ...

3 réponses
Avatar
Trident
Bonjour à tous,

Je programme un jeu en C++/OpenGl depuis deux semaines et comme je suis
autodidacte, viens un moment ou de gros probleme arrive.

En fait, je suis en train de faire une console, elle marchait trés bien
jusqu'a ce que je déplace son code dans un nouveau fichier.

En simplifiant mon probleme, voilà ou j'en suis.
J'ai un type d'objet qui s'appel Menu, déclarer et spécifier dans menu.h et
menu.c
tout en haut de menu.c aprés include menu.h, j'ai list<Menu*> menu_list;
et dans le constructeur il est écrit menu_list.push_front(this);
autrement dit à chaque fois que je créé un Menu, son adresse est ajouter à
la liste des menu existant.
Jusque là tout va bien.
Pour faire ma console, j'ai besoin d'un Menu_barre_v qui dérive de Menu,
donc dans console.c j'écris :
Menu_barre_v cons_barre_v;


Je compile .... je lance ... et plantage, gdb me dit que c'est au moment de
l'ajout dans la liste !!


en fait, il n'y a pas de raison que la liste soit créée avant cons_barre_v
puisqu'il sont tout les deux à un meme nivo (en tete)..
j'en ai déduit que j'essayé de créer le menu avant la liste d'ou plantage...
le pire c'est que si je demande la création du menu dans un autre fichier du
programme, ca marche (le fichier ou j'avais mis la console à l'origine).

Ma question est donc : comment faire pour que l'en téte de fichier soit
executer avant l'en tete d'un autre.

A.c:
***************
int i;
***************

B.c:
***************
int j;
***************


comment faire pour que i soit créé avant j ou vise versa ?!?

Merci d'avance pour votre aide,
Pierre.

3 réponses

Avatar
Fabien LE LEZ
On Sat, 3 Jul 2004 23:29:14 +0200, "Trident"
:

A.c:
int i;

B.c:
int j;

comment faire pour que i soit créé avant j ou vise versa ?!?


Si je ne m'abuse, ce n'est pas possible, du moins pas directement.

D'une manière générale, les variables globales sont déconseillées de
toutes façons.

J'avoue ne pas connaître la méthode "officielle" pour ce genre de
problèmes, mais je crois que cette méthode fonctionne :


typedef std::set <Machins*> ListeMachins;
static ListeMachins *liste_machins= 0;

void AjouteMachin (Machin* m)
{
if (liste_machins == 0)
{
liste_machins= new ListeMachins;
}
liste_machins.insert (m);
}

void EnleveMachin (Machin* m)
{
if (liste_machins != 0)
{
ListeMachins::iterator it= liste_machins.find (m);
if (it != liste_machins.end())
{
liste_machins.erase (it);
}
if (liste_machins.empty())
{
delete liste_machins;
liste_machins= 0;
}
}
}

Et, bien entendu, les constructeurs de Machin doivent appeler
AjouteMachin(), et le destructeur de Machin doit appeler
EnleveMachin().


--
schtroumpf schtroumpf
Jean-Emile de France

Avatar
Trident
Merci pour ta réponse,

effectivement, j'ai regardé dans mon Stroustrup et y dit que il faut le
faire, c'est pas propre...

Je l'avoue, ca m'emmerde un peu, mais g réussi à faire sans.
Avatar
Fabien LE LEZ
On Sun, 4 Jul 2004 00:29:15 +0200, "Trident"
:

mais g réussi


Ecrire les mots en entiers serait fort apprécié. Merci d'avance.


--
schtroumpf schtroumpf
Jean-Emile de France