a.h:#ifndef_KNIFE_ADT_H#define_KNIFE_ADT_HenumColor{red,greed,blue};typedefstructa{inta;doubleb;Colorc;}A_type;A_typeA_array[1024];//(1)intCount;voidfunc(A_typeA,Colorcolor_type)#endifa.c:#include"a.h"Count=0;//(2)voidfunc(A_typeA,Colorcolor_type){;}main.c:#include"a.h"intmain(){Count=0;return0;}问题:如上文件结构,编译会报重复定义的错误。在VS中,会报错.obj重定义。怎样处理最好?另外如(2),如果想要给.h文件中变量初始化,最合适的方法是?补充:1.将声明写在.C文件中,.h文件中只有enum枚举常量与结构体的声明,所有变量定义放在.c文件中:c1.h:#ifndef_KNIFE_ADT_H#define_KNIFE_ADT_HenumColor{red,greed,blue};structa;typedefstructaA_type;voidfunc(A_typeA,Colorcolor_type);#endifc1.c:#include"c1.h"structa{inta;doubleb;Colorc;};A_typeA_array[1024];//(1)intCount;voidfunc(A_typeA,Colorcolor_type){;}main.c:#include"c1.h"intmain(){Count=0;return0;}VS2012编译信息:1>c:\test\test_file\c1.cpp(4):errorC2380:“a”前的类型(构造函数有返回类型或是当前类型名称的非法重定义?)1>正在生成代码...1>正在编译...1>main.cpp1>c:\test\test_file\main.cpp(4):errorC2065:“Count”:未声明的标识符在头文件中声明intCount,即可消除最后一条编译错误信息。另外,在头文件中声明intCount后又在源文件中加上externintCount,有什么作用呢?具体用在哪些情景下?
智慧大石
相关分类