介绍
- A.h 中定义 bool Laser_Statues[10];,A.cpp中#include “A.h”
- 因为B中也要使用该变量,故 B.cpp中 #include “A.h”,在B.ccp中使用该变量,但是提醒 LNK2005 已经在*.obj中定义
解决方法
- 在A.h中声明 extern bool Laser_Statues[10];
- 在A.cpp中定义 bool Laser_Statues[10] = {};
知识点
1.为什么会出现已经定义的问题?
已经排除掉头文件重复包含的问题,并且每个头文件里面都加入#pragma once。原因是因为每个cpp文件在编译的时候都是独立的,A在编译的时候用到该变量,B在编译的时候也用到了该变量,所以会重定义
2.为什么要在加extern?
据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义:
- 声明必须使用extern关键字
- 不能给变量赋初值
因为大家都要用到该变量,故需要让大家都知道他的存在(声明),头文件中应使用extern关键字声明全局变量,具体的定义在cpp中实现。头文件中不建议定义变量,不专业