原因
重复定义错误。C语言规定:一个变量可以多次声明但是只能定义一次。多个.c或.cpp文件同时引用一个.h文件时,其被包含至多个目标文件(.o)中,链接时,.h文件中定义的变量/函数会出现重复定义的错误。
解决方法
- C语言中可以在.h文件中添加条件编译解决(#ifndef…)。在C++中无效,引文C++中#indef的作用域仅限一个文件
- C++中可在变量/函数前添加static
- 在c/cpp文件中定义extern修饰的变量
- 尽量避免在.h文件中定义变量、函数
- C++中可使用inline修饰函数
- C中可以定义宏函数(容易写错,因此C++中出现了inline)
解释
使用static修饰的函数、变量,每个cpp文件都调用属于其本身的函数、变量,两者地址不同、也不互通。