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++] Problème d'architecture?

Musashi001
Musashi001
Niveau 10
09 août 2005 à 21:26:16

Bon j´ai un petit problème dans mon programme.
J´essaye de faire plusieurs fichiers sources ( main.cpp et rpg.cpp) et un header(rpg.h)

Seulement lorsque je compile il m´affiche des erreurs bizarre, les voici:

-------------------------------------------------

multiple definition of `event´
first defined here
multiple definition of `Screen´
first defined here
multiple definition of `Charset01´
first defined here
multiple definition of `bmp´
first defined here
multiple definition of `pos´
first defined here
multiple definition of `Music01´
first defined here
multiple definition of `Music02´
first defined here
multiple definition of `mid´
first defined here
ld returned 1 exit status

-------------------------------------------------

Pas d´indicactions de ligne ou même de fichier sur ces erreurs.

J´ai eu beau chercher, je ne comprend pas l´origine de ces erreurs.

Si vous pouviez m´aidez, ça serais sympa!

voila les sources:
http://walljv.free.fr/index.php?to=view&id=100

vsl5
vsl5
Niveau 8
09 août 2005 à 21:34:25

Dans le fichier rpg.c colle ça après les includes :

SDL_Event event;
SDL_Surface *Screen, *Charset01;
SDL_Rect bmp, pos;
FMUSIC_MODULE *Music01;
4FSOUND_STREAM *Music02;
int mid=1;

et dans ton . h met extern devant les declaration de variable ( corriger moi si c´est faux :doute: )

Musashi001
Musashi001
Niveau 10
09 août 2005 à 21:38:39

ça met de nouveau la même erreur...

godrik
godrik
Niveau 30
10 août 2005 à 02:01:20

tu definit plusieurs variable bmp; en effet, tu en declare ne par fichier.

Le C alloue un nom dans l´espace de mémmoire a partir du moment ou il lit
SDL_rect bmp;
tu ne lui dit pas que cette variable vient d´ailleurs ni meme qu´elle est propre au fichier.
il ne comprend donc juste pas quoi faire.

je pense que tu vouais ecrire dans un de te fichier SDL_rect bmp et dans tout les autres ( mais pas dans le premier)
extern SDL_rect bmp;
ainsi la variable n´est crée qu´une sel fois et tout le monde accède a la même

Notons qu´il existe aussi static qui permet de dire que la variale n´existe que dans ce fichier.
ceci peut etre utile lorsque l´on utilise un nom de variabl classique en variable globale

Musashi001
Musashi001
Niveau 10
10 août 2005 à 02:09:11

Merci beaucoup Godrik, en effet j´ai mit static devant chacune de mes déclarations de variables et la plus de probleme!

J´ai aps l´habitude d´utiliser plusieurs fichier sources!

godrik
godrik
Niveau 30
10 août 2005 à 02:11:05

mmm, je doute fortement que tu desirais faire une declaration satic, mais plutot une declaration extern...

Musashi001
Musashi001
Niveau 10
10 août 2005 à 02:13:11

Bin le static ne m´épargne pas du boulot?

Si j´ai bien compris je les déclare une fois ou je veut en static et apres je les appelle normalement

Ou alors je les déclare une fois noramlement et les appelle avec extern

C´est pas ça?

franco01
franco01
Niveau 7
10 août 2005 à 11:24:52

Les déclarations de variables doivent être écrites dans le rpg.cpp et non dans le rpg.h.

Puis normalement ca compilera :-)

godrik
godrik
Niveau 30
10 août 2005 à 12:12:39

j´ai une norme sous la main et elle dit ( 4.6):
" La déclaration static, appliqué à une variable externe ( globale) ou a une fonction, limite la portée de cet objet a la suite du fichier source en cours de compilation."
La norme ne parle pas ( ou je n´ai pas troué) de l´utilisation de plusieurs variables globale static de même nom. J´ai tendance a penser qu´il ne faut donc pas l´utiliser.
Une autre petite citation de la norme ( 4.4):
" En revanche, si l´on veut faire référence à une ariable externe avant qu´elle soit définie, ou si elle est définie dans un fichie source et utilisée dans un autre, il faut absolument se servir d´une déclaration de classe extern"

Je rappele que c´est un extrait de la nomre C et non de la norme C++, et que donc " classe" n´a pas le sens qu´on lui connait en C++.
Ce que tu cherche a faire est donc:
--rpg.h--
41 extern SDL_Event event;
42 extern SDL_Surface *Screen, *Charset01;
43 extern SDL_Rect bmp, pos;
44 extern FMUSIC_MODULE *Music01;
45 extern FSOUND_STREAM *Music02;
46 extern int mid;
--rpg.cpp--
il faut ajouter!
SDL_Event event;
SDL_Surface *Screen, *Charset01;
SDL_Rect bmp, pos;
FMUSIC_MODULE *Music01;
FSOUND_STREAM *Music02;
int mid=1;

En outre, je me permet de discuter l´utilisation de variable globale pour faire cela. Il serait préférable, à mon sens, d´encapsuler ces variables.

Musashi001
Musashi001
Niveau 10
10 août 2005 à 14:32:39

J´ai mis mes variables en extern dans mon header et je les ai déclarées dans mon main est ça marche correctement. ( j´utilisais certaines vaiable dans le main aussi)

Pour les variables globales, je pensais m´en débarrarasser plus tard, c´était juste pour voir cve que ça donnait comme ça.

Merci a vous!

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