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

variable globale plus fichier sources

bobtriguette32
bobtriguette32
Niveau 6
24 juillet 2005 à 21:35:38

bonjour,
je suis en train de créez un programme quizz séparer en plusieurs fichier source. Je veux que ma variable score puisse être utiliser dans tous les fichiers sources de mon programme. J´ai penser l´inclure dans mon header file(.H) mais ça me fait l´erreur suivante:

multiple definition of `score´
first defined here

alors comment faire pour que ma variable puisse être utiliser dans tous mon programme

merci de répondre

Ptival
Ptival
Niveau 10
24 juillet 2005 à 21:44:59

Lorsque tu crées un header que tu inclues dans plusieurs fichiers, il faut utiliser ça :

  1. ifndef UNE_CONSTANTE
  2. define UNE_CONSTANTE

/ / Ici tu écris ton header

  1. endif

Pour la constante UNE_CONSTANTE, il n´y a pas trop de règles, perso j´ai pris l´habitude de l´appeller :

_NOMDUFICHIER_H_

Par exemple pour main.h

  1. ifndef _MAIN_H_
  2. define _MAIN_H_

/ / Ici tu écris ton header

  1. endif

Pour plus d´infos sur ces commandes avec les #, ce sont de directives pré-compileur, en gros ça dit :

  1. ifndef _MAIN_H_

-> Si la constante _MAIN_H_ n´a pas été définie

  1. define _MAIN_H_

-> Tu définis cette constante
-> Là il met ton code source

  1. endif

-> Fin du " Si"

Ainsi, la première fois il va mettre ton fichier, la seconde fois qu´il sera inclus, il verra que la constante est définie, donc il ne le remettra pas ( vu qu´il y est déjà :))

Cependant dans ton cas attention, je ne suis pas sur que les différents fichiers vont se partager la même variable, et non pas avoir chacun une variable qui a le même nom :\

Je vais faire un test et je reréponds...

bobtriguette32
bobtriguette32
Niveau 6
24 juillet 2005 à 21:47:59

d´accord merci beaucoup

bobtriguette32
bobtriguette32
Niveau 6
24 juillet 2005 à 22:05:02

Ca ne marche toujours pas. Y a t´il un moyen de faire qu´une variable puisse être utiliser dans tous le programme??

Ptival
Ptival
Niveau 10
24 juillet 2005 à 22:17:35

Bon alors il faut déclarer la variable en extern dans le header, et la définir dans un des fichiers CPP :)

Comme ça tu es sûr qu´ils partagent tous la même variable.

bobtriguette32
bobtriguette32
Niveau 6
24 juillet 2005 à 22:56:25

peux tu m´expliquer pourquoi???

bobtriguette32
bobtriguette32
Niveau 6
24 juillet 2005 à 23:01:09

laisse tomber de toute facon ca ne fonctionne vraiment pas. Y aurait t´il un autre moyen de faire que la variable puisse être utiliser dans tous le programme

bobtriguette32
bobtriguette32
Niveau 6
25 juillet 2005 à 01:23:04

donc voici le coude source de main et de mo header file

Main:
/ * Quizz 1.0 ce petit quizz est utile à ma
maitrise du c++ */

  1. include " all.h" / /prototype des fonctions utilisées,librairies,variables

int main()
{
int choix;//variable choix du joueur
score=0;

cout<<"que voulez vous faire:"<<endl<<"1 aide"<<endl<<"2 jouez"<<endl;
cin>>choix;
if(choix==1)
{
system("CLS");
aide();//appel de la fonction aide

}
question();
return 0;
}

header file:

  1. ifndef _ALL_H_ / /si la constante _ALL_H_ n´est pas défini
  2. define _ALL_H_ / /définie _ALL_H_

void aide(); / /fonctions personelles
int question();

int score;

  1. include < cstdlib> / /librairies standards
  2. include < iostream>
  3. include < conio.h>

using namespace std; / /me permet d´utiliser cout et cin

  1. endif / /fin de la condition

et voici les erreurs:
- multiple definition of `score´
- first defined here
- ld returned 1 exit status
- C:\Dev-Cpp\Makefile.win [Build Error] [quizz.exe] Error 1

merci de m´aider

Ptival
Ptival
Niveau 10
25 juillet 2005 à 11:01:51

extern int score;

si tu mets pas extern, forcément il en compte 2 !

JeanYvesYves
JeanYvesYves
Niveau 10
25 juillet 2005 à 11:09:31

tu mets
extern int score;
dans TOUS les fichiers ou tu parles du score.

et dans ton main, tu définis
int score;

en globale.

Sache que c´est quand meme sale.

L´idéal, c´est de définir
int score dans un . cpp bas niveau
et dans le header, faire des accesseurs...

Lapintade
Lapintade
Niveau 30
25 juillet 2005 à 11:18:10

Vi, c´est " extern" le truc a faire.

Sache que c´est quand meme sale

Pour des trucs amateurs, on va pas se prendre la tete quand meme :)

A partir du moment ou les variables ont un usage unique et sur tout la durée du programme ( comme score), faire une globale c´est pas sale je trouve.

bobtriguette32
bobtriguette32
Niveau 6
25 juillet 2005 à 17:21:41

Rebonjour,
dans tous mes fichiers où j´utilise int score j´ai écrit:

extern int score;

sauf dans main où j´ai écrit:

int score = 0;

et dans mon . h je n´ai rien écrit sur int score.
mais mon compil me met les mêmes erreurs. Pouvez vous m´aidez encore une fois. Je suis débutant lol. Et et JY² peut-tu m´expliquer le truc de l´ascenceur par simple curiosité. Merci

godrik
godrik
Niveau 30
25 juillet 2005 à 17:37:56

il parle d´un accesceur c´est assez simple
--toto.h--
void setToto ( int t);
int getToto ( );
--toto.cpp--
int coincoin;
void setToto(int t){coincoin = t;}
int getToto(){return coincoin;}

Sinon, pour lapintade: autant faire prendre de bonnes habitudes de programmations... :)

Lapintade
Lapintade
Niveau 30
25 juillet 2005 à 18:03:38

Si on respecte l´utilisation que j´en ai donné, ces globales ne sont pas une mauvaises habitude. Dans tous les jeux pros sur lesquels j´ai bossé, il y avait des globales, c´est normals. C´est stupide de pas les utilisés pour les choses uniques.

bobtriguette32
bobtriguette32
Niveau 6
25 juillet 2005 à 19:03:52

merci de vos explications mais pouvez vous me dire pourquoi il ne marche pas??

bobtriguette32
bobtriguette32
Niveau 6
26 juillet 2005 à 16:44:28

Rebonjour,
pouvez-vous m´expliquez plus en détail ce qu´est un ascenceur car votre truc de extern ne fonctionne vraiment pas.

JeanYvesYves
JeanYvesYves
Niveau 10
26 juillet 2005 à 16:45:50

bobtriguette32 > c´est parce que tu l´as mal utilisé.

bobtriguette32
bobtriguette32
Niveau 6
26 juillet 2005 à 17:02:27

mais je ne comprends pas la façons de l´utiliser peut tu m´expliquez s.v.p. j´aimerais vraiment comprendre.

godrik
godrik
Niveau 30
26 juillet 2005 à 17:09:33

bob: tout est dans le morceau de code que je t´ai donné

bobtriguette32
bobtriguette32
Niveau 6
26 juillet 2005 à 17:15:23

Merci mais j´aimerais aussique vous m´expliquiez pour les extern s.v.p.

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