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]"
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"
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]; } }
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include "LKH.h"
Je ne sais pas comment distinguer les 'déclarations' de la 'définition'.\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'
J'essaye donc avec de la compilation conditionnelle de déclarer mes variables et fonctions comme des éléments externesA 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern "C" { ... int KarpPartitioning; ... }
Édition des liens en cours...
AddCandidate.obj : error LNK2005: _KarpPartitioning déjà défini(e) dans Activate.objLorsque je choisi un module dans lequel insérer les déclarations non externes, je retrouve la première erreurSolveRoheSubproblems.obj : error LNK2019: symbole externe non résolu _Random référencé dans la fonction _SolveRoheSubproblems
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.\SRC\LKHmain.cpp(5) : error C2086: 'int KarpPartitioning'*: redéfinition
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 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part KarpPartitioning = 0;
Merci de votre aide
Partager