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

fichier'.h'

bobtriguette32
bobtriguette32
Niveau 6
28 février 2006 à 20:49:07

Bonjour. Quand j´essaie de déclarer des variable dans un fichier".h" il y a une erreur me disant qu´elle sont déclarée plusieurs fois. Commet faire pour que ca ne se produise pas?

n00ble55
n00ble55
Niveau 4
28 février 2006 à 20:56:06

il faut faire :

  1. ifndef _TONNOMDEFIC_H
  2. define _TONNOMDEFIC_H

//variables

  1. endif

ca veut dire ke kan le compilo linke les files, il vérifie s´il n´a pas deja linké celui la, ce qui évite les plusieurs linkages et donc plusieurs déclarations dla meme variable(enfin jcroi)

Lapintade
Lapintade
Niveau 30
28 février 2006 à 20:57:06

les variables ne sont jamais declarés dans les .h

declare ta variable dans UN fichier cpp et dans le .h associé tu mets

extern type mavariable;

Ca permets de savoir a tout le monde que "quelquepart" il y aura mavariable, le linker fera le boulot de retrouver ou (et la compilation sera ok sans poser de questions)

delf__ar
delf__ar
Niveau 7
28 février 2006 à 20:57:47

oui ou alors, si ton fichier .h se rapporte a un fichier .c(normalement, c´est comme ca), tu declare par exemple int a = 0; dans ton fichier .c et extern int a; dans ton fichier .h

delf__ar
delf__ar
Niveau 7
28 février 2006 à 20:58:33

oups, trop tard

Lapintade
Lapintade
Niveau 30
28 février 2006 à 20:58:55

n00ble55 > Ca permet d´avoir qu´une seul definition par fichier ca, mais si t´as 4 cpp et si tu defini 4 fois la meme variable (une fois par fichier), le linker va raler (mais pas la compilation).

Coti
Coti
Niveau 10
28 février 2006 à 20:59:56

les .h sont faits pour contenirs les prototypes de tes fonctions pour que .c détécte les prototypes des fonctions contenus dans .c... pas tres compréhensible...

Coti
Coti
Niveau 10
28 février 2006 à 21:00:45

Réctification :

les .h sont faits pour contenirs les prototypes de tes fonctions pour que .c détécte les fonctions contenus dans .c... enfin je croit...

bobtriguette32
bobtriguette32
Niveau 6
01 mars 2006 à 00:05:23

Merci de vos réponses!!!

bobtriguette32
bobtriguette32
Niveau 6
01 mars 2006 à 00:10:06

Je veins de tester et ca me fait la même chose.
voici le code de mon ".h":

  1. include <SDL/SDL.h>

int xpos=0,ypos=0,collide = 0;
SDL_Surface *back;
SDL_Surface *carre;
SDL_Surface *roche;
SDL_Surface *screen;

voici celui de mon .h:

  1. ifndef ALL_H
  2. define ALL_H
  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <SDL/SDL.h>

extern int xpos=0,ypos=0,collide = 0;

extern SDL_Surface *back;
extern SDL_Surface *carre;
extern SDL_Surface *roche;
extern SDL_Surface *screen;

int main(int argc, char *argv[]);
int collision();
int initimage();
void drawimage(SDL_Surface *img);
void drawimage(SDL_Surface *img, int x,int y,int w,int h,int x2,int y2);
void drawimage2(SDL_Surface *img, int x,int y,int w,int h,int x2,int y2);
void drawscene();

  1. endif

J´attend vos réponses

Lapintade
Lapintade
Niveau 30
01 mars 2006 à 07:58:16

Copie aussi le message d´erreur, ca ira plus vite.

peut etre que l´extern n´est pas pris sur toutes tes variables (celle que tu as mis en une seule ligne). Ecris trois lignes pour essayer.

De plus, tu ne peux pas assigner une valeur dans ton .h, c´est simplement le prototype (cad tu dis "quelquepart j´ai un int qui s´appelle xpox".

extern int xpos;
extern int ypos
extern int collide;

bobtriguette32
bobtriguette32
Niveau 6
01 mars 2006 à 16:39:27

Il me marque:

multiple definition of `xpos´

il me marque ca dans pour tout mes variables.
Je les déclare dans un .c puis je les met extern dans le .h mais ca ne marche pas.

dnob700
dnob700
Niveau 10
01 mars 2006 à 19:12:21

et tu les déclare dans un seul .c ? ou dans tout tes .c ?

bobtriguette32
bobtriguette32
Niveau 6
01 mars 2006 à 20:29:40

dans un seul c et je les utilises dans tous mes autres

rastacouer
rastacouer
Niveau 8
01 mars 2006 à 23:12:32

j´ai pas très bien compris, à quoi sert de définir les variables dans les .h, avec extern ?
pourquoi il ne peut pas faire tout simplement pour son fichier .h :

  1. ifndef ALL_H
  2. define ALL_H
  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <SDL/SDL.h>

int main(int argc, char *argv[]);
int collision();
int initimage();
void drawimage(SDL_Surface *img);
void drawimage(SDL_Surface *img, int x,int y,int w,int h,int x2,int y2);
void drawimage2(SDL_Surface *img, int x,int y,int w,int h,int x2,int y2);
void drawscene();

  1. endif

?

rastacouer
rastacouer
Niveau 8
02 mars 2006 à 15:57:24

personne pour me répondre ?

bobtriguette32
bobtriguette32
Niveau 6
02 mars 2006 à 16:13:39

Je crois que tu ne comprend pas mon problème. Ce n´est pas avec mes fonctions que j´ai de la difficulté mais mes variables. Alors est-ce que quelqun sait pourquoi?

dnob700
dnob700
Niveau 10
02 mars 2006 à 18:34:10

rastacouer : calme toi, tu attend suffisement longtemps et après tu as ta réponse.

Ce que tu propose est très bien, mais tu ne déclare plus les variable, donc si d´autre fichier .cpp que le fichier .cpp où elles sont déclaré veulent y accéder, on ne peut plus. Donc si on a besoin de variable vraiment globale ce n´est pas terrible d´avoir à les déclarer une fois dans chaque fichier .cpp du programme (où il faudra ausi mettre extern, sauf dans le fichier principale).

bobtriguette32
bobtriguette32
Niveau 6
02 mars 2006 à 18:56:57

Donc voici mon code source:
http://www.rafb.net/paste/results/yTnJA680.html

aider moi a règler le problème je ne sais vraiment plus quoi faire j´ai besoin de variable globale mais je ne peux pas en avoir.

dnob700
dnob700
Niveau 10
02 mars 2006 à 21:06:47

déclare tes 3 variables globales dans ton .cpp directement après le #include "all.h", c´est à dire hors de toutes fonction, au même endroit que la déclaration de keys2 et non pas dans la fonction main, sinon ce sont des variables locale à la fonction.

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