IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

VC++9Express red�finition de variables globales et externes


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par d�faut VC++9Express red�finition de variables globales et externes
    bonjour,

    Je rencontre un probl�me qui est trivial mais j'en perds mon latin informatique avec VisualStudio

    Je reprends un vieux projet C trouv� sur LKH
    et essaye de l'int�grer dans une solution VisualStudio Express 2008

    La compilation et l'execution du projet en version d'execution "release" fonctionne
    Lorsque je parametre un projet en version de d�boggage "debug", le programme plante � la premi�re utilisation de la variable r�cup�r�e dans la ligne de commande "argv[1]"

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    int main(int argc, char *argv[])
    {
        if (argc >= 2){
          ParameterFileName = argv[1];
        }
    }
    Pour tenter de comprendre en utilisant le deboggueur, je d�cide donc de passer en C++ en changeant simplement les extensions des codes sources de ".c" en ".cpp"
    L�, les choses se compliquent :

    Tous les modules utilisent le m�me fichier de d�claration avec la directive du pr�processeur #include car toutes les variables et toutes les fonctions sont d�clar�es de mani�re globale
    A la compilation du deuxi�me module, le compilateur C++ me dit que les variables sont d�ja d�finies dans le premier module et ainsi de suite pour toutes les variables globales de tous les modules
    .\SRC\LKHmain.cpp(5) : error C2086: 'int KarpPartitioning'*: red�finition
    c:\calc_vdc\linkernighan\lkhwin-2.0.3\src\LKHmain.h(264)*: voir la d�claration de 'KarpPartitioning'
    Je ne sais pas comment distinguer les 'd�clarations' de la 'd�finition'

    J'essaye donc avec de la compilation conditionnelle de d�clarer mes variables et fonctions comme des �l�ments externes
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    extern "C" { ... int KarpPartitioning; ... }
    A l'�dition des liens, j'ai le message d'erreur d'une variable qui est d�j� d�finie ou qui est r�f�renc�e ailleurs
    �dition des liens en cours...
    AddCandidate.obj : error LNK2005: _KarpPartitioning d�j� d�fini(e) dans Activate.obj
    SolveRoheSubproblems.obj : error LNK2019: symbole externe non r�solu _Random r�f�renc� dans la fonction _SolveRoheSubproblems
    Lorsque je choisi un module dans lequel ins�rer les d�clarations non externes, je retrouve la premi�re erreur
    .\SRC\LKHmain.cpp(5) : error C2086: 'int KarpPartitioning'*: red�finition
    Donc, je ne comprends pas ce m�lange de d�claration et de d�finition, entre le C et le C++ et entre les modules
    Moi qui pensait que l'on pouvait r�p�ter autant de d�clarations que voulues c'est � dire autant de fois que de modules dans le projet
    Et que la d�finition d'une variable se faisait � son initialisation, a savoir dans le main dans ce cas de figure
    J'ai beau relire mes bibles, je n'en retrouve pas mon latin (je vais �couter du Brassens pour compenser )
    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par d�faut
    ON NE CHANGE PAS UNE EXTENSION SANS SAVOIR CE QUE L'ON FAIT MALHEUREUX !!!

    Le C et le C++ ne sont pas tout � fait identiques... certaines r�gles de C n�cessite des transformations pour C++.
    Ce n'est pas un probl�me inh�rent � Visual Studio.

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    Le debuggeur VS marche aussi avec des fichiers C.
    Enfin, au moins il marchait il y a pr�s de 10 ans sous VC++6, la derni�re fois que j�ai vu du C, du vrai.

  4. #4
    Membre extr�mement actif

    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 408
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 408
    Par d�faut
    je ne sais pas ce que tu as t�l�charg� sur le site, j'ai dl �a : http://www.akira.ruc.dk/~keld/resear...HWin-2.0.3.zip

    j'ai lanc� le .sln et �a marche tant en debug qu'en release.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par d�faut sous probl�me : arguments argc et argv[] avec des valeurs incoh�rentes
    j'ai enfin adapt�/migr� mon projet de "C" � "C++" sous VC++v9
    et le verdict est toujours le m�me :

    si dans les parametres du projet j'introduis un argument � la ligne de commande c:\monfichier.txt

    dans la version 'release' le main re�oit un parametre argc = 2 et agrv[1]="c:\monfichier.txt"

    dans la version 'debug' le main re�oit un parametre argc = 2024226254 ou n'importe quelle autre valeur et un pointeur null pour argv[1]

    la seule solution est de modifier les valeurs de argc et agv[] dans le main ...

    je ne sais pas quoi dire d'autre que c'est un probl�me li� � l'IDE

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par d�faut sous probl�me : d�clarer les variables globales en extern "C" pour passer de .c � .cpp
    pour migrer mon projet de "C" � "Cplusplus", j'ai d�clar� et d�fini toutes mes variables globales et prototypes de fonction en
    extern "C"
    mais impossible de regrouper les d�clarations dans un seul bloc
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    extern "C"{
    ...
    v1;
    v2;
    ...
    }
    il a fallu que je le sp�cifie ligne par ligne, variable apr�s variable
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    ...
    extern "C" v1;
    extern "C" v2;
    ...
    ce qui me semble tr�s �tonnant

    l� encore je ne sais dire quoi d'autre que c'est li� � l'IDE VC++v9

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 14/10/2009, 10h52
  2. variable globale definie dans un .js externe
    Par master_kb2 dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 05/04/2008, 17h58
  3. STL List et variable globale (extern)
    Par flipper203 dans le forum SL & STL
    R�ponses: 9
    Dernier message: 04/07/2006, 14h20
  4. Utilisation variable globale, extern...
    Par mamok dans le forum MFC
    R�ponses: 3
    Dernier message: 29/03/2006, 10h50
  5. variable global fichier externe?
    Par molesqualeux dans le forum C
    R�ponses: 4
    Dernier message: 01/02/2006, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo