原因:多个文件包含同一个头文件且头文件.h没有加上条件编译。因为每个.h头文件被编译生成独立的标示符,编译器链接时就出现了重复定义的错误。
Methon 1:为每个头文件加上条件编译,避免该文件多次引用时被多次解释。
#ifndef TEST_H
#define TEST_H
#endif
Methon 2:Methon 1无效时,使用extern声明变量/函数在其它文件中定义。
// .h
#ifndef TEST_H
#define TEST_H
extern int a;
extern int func(int a, int b);
#endif
// .cpp
int a = 10;
int func(int a, int b){
return a+b;
}
Methon 3: 在所有全局变量/函数前加上static。
#ifndef TEST_H
#define TEST_H
static int a = 10;
static int func(int a, int b){
return a+b;
}
#endif