写了这样一个头文件
"example.h"
class example{
public:
static int i;
static int get(){return i;}
};
int example::i = 0;
然后很多文件引用到example并调用里面的get()函数,就这样,在链接的时候就出错了。
原因是每个文件在编译的时候都把example的get()函数代码生成进去,同时也把静态变量 i 生成了一次,因为每个文件都是独立的,所以在每编译一个文件的时候也编译了一个i。这样链接的时候就出现了很多个i,于是就出错了。
解决方法:
把i 放到 cpp文件里去,
"example.cpp"
int example::i = 0;
再生成o文件 g++ example.cpp -c
再链接生成即可,这样每个文件在编译的时候,找不到i的实现代码,它们知道在链接的时候可以找到i的实现代码,结果等到每个文件同时生成可执行文件的时候,都是链接同一份代码,即"example.o"。于是结果正确。