zzzzephyr
2020-05-29 17:09
采纳率: 14.3%
浏览 294

有关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函数重定义的错误。

    点赞 打赏 评论

相关推荐 更多相似问题