[C++] Redéclaration variables

Sethpolma Messages postés 66 Statut Membre -  
 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

  1. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    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
  2. Sethpolma Messages postés 66 Statut Membre 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
    1. 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
  3. 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
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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