Backto C/C++ Index
LinkError 指的是编译通过了,但是链接的时候出错.
fatal error LNK1169: 找到一个或多个多重定义的符号
通常指的是在 a.h
中定义了一个全局变量, 然后在 b.cpp
和 c.cpp
中都 include
进去了.
注意这时候, header guard #ifndef ... #def...#endif
是没用的. 因为header guard 防止的是嵌套包含, 无法保护这种重复包含.
解决方案
- 把
a.h
中的全局变量改成 static 的, 这样无论包含多少次, 都只有全局的一份. - 使用
extern
关键字// func was declared in `a.h` and defined in `a.cpp` // we want to use it in `b.cpp` or `c.cpp` extren void func(); //extren 后面根的形式和函数定义形式要完全相同 void mian() { func(); } // var a was declared in `a.h` as `int a;` // we want to use it in `c.cpp` extren int a; //extren 后面根的形式和变量定义形式要完全相同 void main() { int b = a; }