2 vipdizun vipdizun 于 2017.09.10 14:41 提问

关于c++类的静态变量的编译出现重复定义 10C

../Manager.o:(.data+0x0): multiple definition of Cdebug::n'
/tmp/ccm2hcIk.o:(.data+0x0): first defined here
../Epoller.o:(.data+0x0): multiple definition of
Cdebug::n'
/tmp/ccm2hcIk.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

Cdebug的源码如下:

#ifndef DEBUG_H
#define DEBUG_H
class Cdebug{
.....
private:
static int n;
}
int Cdebug::n=1;

#endif

这里我已经用#ifndef 防止头文件重复导入,为什么还会出错?

5个回答

xillee388366
xillee388366   2017.09.10 14:48

是因为这里int Cdebug::n=1;赋值了,它就不仅仅是一个声明了,而是实现,如果把这一句放在cpp文件里就好了。

qq_26499809
qq_26499809   2017.09.10 14:53

private:
static int n;
}
int Cdebug::n=1;
#endif

重点,要考

sessos
sessos   2017.09.10 19:04

去掉int
int Cdebug::n=1;这句去掉int
建议你把这句话写到类的实现文件中

shihengzhen101
shihengzhen101   Rxr 2017.09.11 12:00

int Cdebug::n=1;写到cpp文件中
然后在h文件中添加extern int Cdebug::n=1;

lei973103605
lei973103605   2017.09.14 10:04

你把你的定义放在头文件中,然后在实现的cpp文件在进行赋值。

Csdn user default icon
上传中...
上传图片
插入图片