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