[C++] Redéclaration variables

Sethpolma Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -  
 babar -
Bonjour !

J'ai un petit problème en C++. Je dois avouer que je n'y comprends plus rien. Ce n'est pas la première fois que je programme en dispatchant mon code sur plusieurs fichiers, mais c'est la première fois que je suis confronté à ce problème de redéclaration de variable...

Voici une partie de mes différents fichiers.

Fichier main.cpp

#include "decl_func.h"
#include "decl_var.h"

extern bool fullscreen;

int WINAPI WinMain(...)
{
...
}


Fichier drawGL.cpp :

#include "decl_var.h"

int DrawGLScene(GLvoid)
{
...
}


Fichier decl_var.h

#ifndef DECLVAR
#define DECLVAR

#include <windows.h>

...

#endif


Voilà. Et, mon compilateur m'écrit d'assez nombreux "multiple definition of 'NOM_DE_VARIABLE'". Pourtant, j'ai bien mis des #ifndef... Mais ils ne semblent pas agir.

J'utilise Dev C++ 4.9.9.2. Si quelqu'un sait comment faire... Merci beaucoup !

4 réponses

arth Messages postés 9374 Date d'inscription   Statut Contributeur Dernière intervention   1 293
 
bonsoir

je suppose que tu utilises les 3 fichiers pour un seul programme( pit etre je me trompe), mais pour moi le problème serait que tu appelles à la fois "decl_var.h" dans le main.cpp et dans le drawGL.cpp . essaie d'en enlever un des deux , je pense ca devrait marcher. sinon bah n'écoute plus ce que je te conseille lol.

bonne fin de soirée
0
Sethpolma Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   15
 
Justement ! Je sais que je réinclus plusieurs fois ces fichiers. Mais j'en ai besoin. Car, mon fichier decl_var.h contient la déclaration de toutes les variables de mon programme. Et je dois les redéclarer dans les fichiers où je les utilise, vu que je les déclare comme étant extern.

Je réessaierai tout à l'heure avec Visual C++. Car, je ne pense pas avoir déjà eu le problème avant, avec cet autre compilateur... Affaire à suivre... :)
0
babar
 
Dans tes fichiers .h tu écris, par exemple si ton fichier est "nom.h":

sur les deux premières lignes .
#ifndef _NOM_H_
#define _NOM_H_


dernière ligne :

#endif


cela permet d'appeler ton fichier qu'une seul fois lors de l'édition de lien, et ça évite les problèmes.

J'espère avori répondu à ta question
0
Lupin
 
Bonjour,

je crois aussi qu"il y a un problème de dédoublement.
J"ai apprit a déclaré tous les "include" dans un seul
fichier et tous les fichiers du projet pointe sur
celui-ci.

Lupin
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Ben n'utilise pas de variables globales de toutes façons, c'est mal. En général quand on utilise une variable globale alors que le fichier la définissant n'est pas inclu, on utilise le mot extern.

Si un jour tu as des fonctions définies (ie proto+code) dans le .h, veille à mettre un inline pour éviter une multidéfinition de fonctions.

Bonne chance
0