vipdizun 2017-09-10 06:41 采纳率: 0%
浏览 2608
已结题

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

../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 防止头文件重复导入,为什么还会出错?

  • 写回答

6条回答

  • wangjunhe 2021-01-14 17:23
    关注

    首先理解什么是.h文件,问什么要用.h文件,弄清楚这个就好了。 头文件要被别的文件包含,多个.cp文件包含这个头文件的时候,实际上会在编译的时候在不同的模块定义这个变量,所以会出现重复定义的问题,所以头文件只放变量的声明,.cpp里面放定义,#ifndef DEBUG_H只能防止同一个.cpp多次包含同一个头文件,不能避免多个.cpp包含同样的头文件。

    评论

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊