Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : VS2005 et Variables Globales [ Divers / Général ] (letscode)

vendredi 4 janvier 2008 à 19:40:25 | VS2005 et Variables Globales

letscode

Bonjour,

Bon j'avance bien :)

J'ai un problème irrésolvable.
J'utilise Visual Studio 2005, et j'ai plusieurs fichiers qui incluent un fichiers "communs.h" qui contient tous mes #include et mes #define.
Jusque là pas de problème.

Cependant, cette après midi je voulais rajouter une variable globale dans "communs.h" et ca m'a fait pleins d'erreurs. Je crois que j'ai tout lu sur le sujet mais impossible de trouver une solution.
Selon ce que j'essaie ca me dit soit "variable déjà définie dans ..." soit "symbole externe non résolu..".
Mon projet n'inclue pas de librairie externe et est en multithreadé. Je n'utilise pas de MFC, mais que des API-32 (ce qui va faire plaisir à Brunews :-p )

Voici le contenu de mon fichier, le problème se trouvant au niveau de Tab et de Heap.




//---DEBUT---

#ifndef _COMMUNS_H_
#define _COMMUNS_H_

/* include */
#include <windows.h>
#include "Source_1.h"
#include "Source_2.h"

/* Define */
#define    PATH_SOURCE_1    "C:\\Fichier1"
#define    PATH_SOURCE_2    "C:\\Fichier2"

#define    TAILLE_MAX    4
#define    ACCEPTED_PATH    3

#endif // _COMMUNS_H_

    /* C'est eux qui posent problème :( */

    char AcceptedFormatsList[ACCEPTED_PATH][2][MAX_PATH]= {
    { "C:\\Dossier1",    "C:\\Dossier2" },
    { "D\\Dossier1",    "D:\\Dossier2" },
    { "E:\\Dossier1",    "E:\\Dossier2" }
    };

    HANDLE heap;

//---FIN---


Aidez moi s'il vous plait, plus tard il y aura 100 PATH et 10 fichier cpp, et je vais pas copier coller ca a chaque modif.
Merci d'avance. :-D


vendredi 4 janvier 2008 à 20:03:26 | Re : VS2005 et Variables Globales

luhtor

Simplement ceci devrait régler tous tes problèmes:
    const char AcceptedFormatsList[ACCEPTED_PATH][2][MAX_PATH]= {
    { "C:\\Dossier1",    "C:\\Dossier2" },
    { "D\\Dossier1",    "D:\\Dossier2" },
    { "E:\\Dossier1",    "E:\\Dossier2" }
    };

Si ce n'est pas le cas, ou si tu veux pas rendre la variable constante:
    static char AcceptedFormatsList[ACCEPTED_PATH][2][MAX_PATH]= {
    { "C:\\Dossier1",    "C:\\Dossier2" },
    { "D\\Dossier1",    "D:\\Dossier2" },
    { "E:\\Dossier1",    "E:\\Dossier2" }
    };

Ou encore:
    extern char AcceptedFormatsList[ACCEPTED_PATH][2][MAX_PATH];
Puis dans le .cpp:
     char AcceptedFormatsList[ACCEPTED_PATH][2][MAX_PATH] = {
    { "C:\\Dossier1",    "C:\\Dossier2" },
    { "D\\Dossier1",    "D:\\Dossier2" },
    { "E:\\Dossier1",    "E:\\Dossier2" }
    };

Dans le cas ou tu génères un exécutable, je saurais pas te donner la différence entre le "static" et le "extern".

Perso, je préfère la première solution (cad le simple "const") pour ce genre de donnée.

vendredi 4 janvier 2008 à 21:32:04 | Re : VS2005 et Variables Globales

Cyr62110

'static' est une valeur qui est valable pour le programme complet jusqu'a ce qu'on change la valeur. Alors que 'extern' dit simplement que la variable et sa définition sont dans un autre fichier. Bye

vendredi 4 janvier 2008 à 21:55:37 | Re : VS2005 et Variables Globales

Neo_Fr

Membre Club
static permet de declarer une variable accesible seulement dans le fichier ou elle a été declarer, extern permet d'acceder depuis un fichier source a une variable déclaré ds un autre fichier ex: ds test.c: static BYTE i[] = { 'T', 'e', 's', 't' }; int j = 1234; void __stdcall GetI(BYTE* Ret) { memcpy(Ret, i, sizeof(i)); } void __stdcall PrintJ(void) { printf("%i\n", j); // si on change la valeur de j ds main.c, elle change ici aussi.. } ds main.c: void __stdcall GetI(BYTE* Ret); void __stdcall PrintJ(void); int main(void) { BYTE Test[4]; extern int j; //printf("%s\n", i); Provoque une erreur i non declarer.. GetI(Test); printf("%s\n", Test); printf("j = %i\n", j); j = 2008; PrintJ(); system("PAUSE"); return 0; } Neo_Fr

samedi 5 janvier 2008 à 03:10:48 | Re : VS2005 et Variables Globales

letscode

Ok, merci beaucoup les gars ;)
Très bonnes explications, je comprend mieux maintenant.

Avec const ca marche super pour mon tableau, et pour le heap j'utilise un extern, ca bug mais ca compile donc ca doit venir de moi.
Je vais me débrouiller avec ça.

reMerci.

samedi 5 janvier 2008 à 11:02:52 | Re : VS2005 et Variables Globales

BruNews

Administrateur CodeS-SourceS

rajouter une variable globale dans "communs.h"

NON, on ne met pas de variable dans un h
Variables dans un c ou cpp et leurs inclusions via un h.

common.c
#include "common.h"

SITE currSite;
int v = 0;
char szappname[] = "test";

------------
common.h
#ifndef COMMON_H
#define COMMON_H

#define _WIN32_WINNT 0x0600
#include <windows.h>

#define TYPESMAX      10

typedef struct _SITE {
  DWORD codSite;
  DWORD plaaID;
} SITE, *LPSITE;

extern SITE currSite;
extern char szappname[];

#endif

ciao...
BruNews, MVP VC++


samedi 5 janvier 2008 à 11:23:04 | Re : VS2005 et Variables Globales

luhtor

"NON, on ne met pas de variable dans un h"
=> Oui et non. Autant une variable, je suis d'accord, mais ici, on peut pas vraiment dire qu'il s'agit d'une variable une fois déclarée "constante" (surtout dans le cas de chaine de caractères). Enfin tfacon, mettre dans le .c/.cpp, ca coute rien.

samedi 5 janvier 2008 à 11:36:40 | Re : VS2005 et Variables Globales

BruNews

Administrateur CodeS-SourceS
bien sur mais il doit prendre de bonnes habitudes.

ciao...
BruNews, MVP VC++



Cette discussion est classé dans : problème, include, path, communs, define


Répondre à ce message

Sujets en rapport avec ce message

Segmentation Fault avec Mysql API [ par BenjZ ] Salut à tous,J'ai un GROS et URGENT problème euh... existentielJe n'arrive pas à faire une simple appli pour me connecter à MYSQL depuis C++, sans qu' Problème avec une boucle while [ par arconius ] voilà j'ai fait un prog où l'on tire des dés mais j'ai un problème avec ma boucle while car au lieu de me donner un chiffre aléatoire à chaque fois il pour le generateur nfo ca marche mais pas la. [ par Xs ] bonjours !je suis en train de me faire un logicielpour gerer ma collection de CDs mais voila : lepricipal probleme est que dans les titres, y'a bien a Problème d'héritage [ par Forthian ] Et oui encore un soucis.Je dois faire un héritage de la classe TImage appellée TImageFille. Jusque là pas de problème je pense. Voici mon code:#ifndef ostream_withassign problème de syntaxe [ par balbeau ] Bonjour,j'ai un problème avec un prog C++ développé sous MS Visual C++ 6 mais je travaille avec Studio .NET 2003 (VC++ 7)j'ai le code suivant:void sen comment configurer le include path ? [ par bzouli ] bonjourje voudrais importer une librairie mais le compilateur ne la trouve pas, comment lui indiquer ? problèmes de conflits d'adresse [ par vlad_dracula ] bonjour, voila j'ai un problème quand j'execute ce programme : il compile sans problème mais me sort un problème de conflits d'adresses à l'éxecution. Problème avec un portage vers Win32 [ par o0Leo0o ] Voila, j'avais programmé un bot se connectant à un monde de type active world (www.activeworlds.com).Le bot était en console dos, et donc pas très bea Problème avec les #define en C sous CodeWarrior [ par SilverSurfeur ] Voila mon problème :j'ai un projet qui contient deux fichiers .c. Dans ces deux fichiers, j'effectue un #include "Display.h". Mon fichier Display.h es Problème #include [ par casanoveg ] Je souhaitais faire ma première demo pour un jeu qui me tient à coeur, mais j'ai un problème avec les #include. J'ai voulu faire mon programme sur plu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.