上述问题可能得原因是:
- 我们在头文件中定义了全局变量。
当头文件中定义了全局变量,我们多个.cpp程序引用这个头文件的时候,同时也会包含头文件中定义的全局变量。 当链接器将多个文件链接成一个文件的时候,这时候这个全局变量在这个文件中就发生了重定义。 -- 所以,应该避免在头文件中定义全局变量。
虽然我们使用#ifndef可以防止同一个头文件重复包含,但是各个.cpp文件在预处理的时候,会将头文件中的全局变量包含进去,然后对各个文件进行编译的时候,会给全局变量(包括写在头文件中的)分配内存。所以在一个头文件中定义了全局变量,并且多个.cpp文件包含了它,编译之后(全局变量已经分配内存)对各个.obj文件进行链接就出现重定义问题。