我在as400上有一个ILE C projet,当它被链接时,给我一个全局变量的多重定义的错误或者如果我把全局变量extern给定为未定义的引用。as400 ILE C全局变量多重定义
这是最简单的形式代码:
主:
#include "Header1"
int main(int argc, char** argv){
int x = Foo();
return 0;
}
头1
#ifndef HEADER1
#define HEADER1
struct MyStruct{
int x;
};
struct MyStruct g_myStruct; /* My global struct variable. */
int Foo(void);
#endif
头1实现
#include "Header1"
#include "Header2"
int Foo(void){
g_myStruct.x = 432;
return Bar();
}
头2
#ifndef HEADER2
#define HEADER2
int Bar(void);
#endif
头2执行
#include "Header2"
#include "Header1"
int Bar(void){
return g_myStruct.x;
}
每个文件编译罚款。只有当我试图联系他们,我得到以下错误:
Multiple strong definitions . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB 1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
随着我的全结构声明的前extern关键字,我得到这个错误:
Unresolved references . . . . . . . . . . . . : 2
Symbol Type Library Object Bound Identifier
*MODULE MYLIB I1 *YES g_myStruct
*MODULE MYLIB I2 *YES g_myStruct
为什么您的标题不以'.h'结尾? –
你也忘记了Header1实现中的分号:'g_myStruct.x = 432'但修复它必须编译,你能显示错误吗? –
@AlterMann as400 QSYS文件系统中没有.h。 –