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

关于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包含同样的头文件。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题