1 有了 #pragma once 就不需要下面的
#ifndef FAA_H
#define FAA_H
....
#endif
这种头文件保护符了,2者作用重复。
2 变量重定义是因为你 把变量定义在了头文件里面了,每个包含test.h的.cpp里面都有一个 int a;自然链接的时候就重复了。
3 解决方式:
3.1 变int a;为 const int a;
3.2 变 int a;为 extern int a; 并且随便在某一个(只能有一个).cpp里面写int a;
4 预处理指令能解决的是一个编译单元(可以理解为一个cpp)里的问题,而你的重定义是跨了2个编译单元,预处理指令不可能解决的。