J'ai un projet ILE C sur l'as400 qui, en étant lié, me donne soit une erreur de redéfinition multiple des variables globales ou des références indéfinies si je mets la variable globale extern.as400 ILE C variable multiple redefition
Voici le code dans sa forme la plus simple:
principale:
#include "Header1"
int main(int argc, char** argv){
int x = Foo();
return 0;
}
Header1
#ifndef HEADER1
#define HEADER1
struct MyStruct{
int x;
};
struct MyStruct g_myStruct; /* My global struct variable. */
int Foo(void);
#endif
Header1 mise en œuvre
#include "Header1"
#include "Header2"
int Foo(void){
g_myStruct.x = 432;
return Bar();
}
Header2
#ifndef HEADER2
#define HEADER2
int Bar(void);
#endif
Header2 mise en œuvre
#include "Header2"
#include "Header1"
int Bar(void){
return g_myStruct.x;
}
Chaque fichier compile bien. Seulement lorsque je tente de les relier je reçois l'erreur suivante:
Multiple strong definitions . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
Avec le mot-clé extern devant ma déclaration globale struct, je reçois cette erreur:
Unresolved references . . . . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
Pourquoi vos en-têtes ne se terminent pas par '.h'? –
Vous oubliez également le point-virgule dans l'implémentation de Header1: 'g_myStruct.x = 432' mais en corrigeant cela, vous devez compiler, pouvez-vous afficher l'erreur? –
@AlterMann Il n'y a pas de .h sur le système de fichiers as400 QSYS. –