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:
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
Citation:
.\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:
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
Citation:
�dition des liens en cours...
AddCandidate.obj : error LNK2005: _KarpPartitioning d�j� d�fini(e) dans Activate.obj
Citation:
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
Citation:
.\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
Code:
KarpPartitioning = 0;
J'ai beau relire mes bibles, je n'en retrouve pas mon latin (je vais �couter du Brassens pour compenser ;) )
Merci de votre aide
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
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 mais impossible de regrouper les d�clarations dans un seul bloc
Code:
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:
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