zzzzephyr 2020-05-29 17:09 采纳率: 0%
浏览 434
已采纳

有关C++多文件重定义的问题

图片说明
如图所示,有一个头文件,两个cpp文件
num定义在头文件中
请问为什么num会多重定义
使用宏定义#ifndef...不能避免吗

  • 写回答

1条回答 默认 最新

  • Huoon 2020-05-29 21:57
    关注

    int num = 50; 这句是定义语句。
    头文件里面应该只声明变量,在cpp文件里面定义变量。
    要明白声明和定义的区别,重定义即多个定义,对于编译器来说这是不允许的。
    声明可以多次声明,但是定义是不允许多个的。
    在hd.h里面已经定义了变量num,main.cpp里面包含了头文件hd.h,在预编译阶段,main.cpp里面也会有一个num变量的定义,两个地方都定义了同一个变量,并且都是全局作用域,自然就重定义了。

    头文件 里面声明变量num

    extern int num; 
    

    cpp里面定义变量num

    int num = 50;
    

    就像你在hd.h里面声明了函数void fun(); 在hd.cpp里面定义了fun,这样做是正确的。如果把函数的实现写在头文件里面同样会报fun函数重定义的错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果