关于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个回答

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

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

重点,要考

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问