过早客
  • 首页
  • 节点
  • 成员
  • 广告投放
  • 登录
  • 注册

C++中为什么类的定义能放在头文件中,而变量和函数的定义不能放在头文件中

IT技术 • lllc • 发表于 1 年前 • 最后回复来自 miao0810 • 1 年前

C++新手,自己编译了下,发现只有类的定义能放在头文件中,而变量和函数(non-inline)的定义不行。如题,很困惑。

加入收藏 新浪微博 分享到微信 ❤赞 2458 次点击 0 人赞 0 人收藏

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

共收到14条回复
ycdhqzhiai 1 年前 湖北省 #1 赞 0

变量和函数(non-inline)的定义不能放在头文件中,为什么不能???

phynos 1 年前 湖北省 #2 赞 0

1、头文件里面想放什么就放什么,甚至可以把源程序全部写到头文件,.C文件只需要include就能编译运行
2、不管你头文件放什么,你要保证全局变量定义只能有一个,但是可以有多个声明
综上,你可以定义变量在头文件,但是你只能有一个.c文件include,否则就重复定义。。。

后面这种简单问题就直接问chatGPT,没必要在论坛问

r121_hb 1 年前 湖北省 #3 赞 0

放在.h文件中的函数一般用static inline修饰,在引用这个.h的.c文件中相当于定义了这个函数,函数作用范围为本文件;如果直接放到.h中,那么如果有两个.c包含这个.h,编译器就会报重复定义,因为这个函数的作用域广了

visvlee 1 年前 广东省 #4 赞 1

因为类名不参与链接啊,在类类部实现的构造函数,默认编译器都给你加上了inline,所以链接的时候不存咋符号多重定义的问题,但是变量和函数如果放在头文件,不加上static(内部符号链接,编译单元之间不可见),inline,被多个编译单元包含,就会出现符号多重定义的问题,链接器不知道链接哪一个

lllc 楼主 1 年前 澳大利亚 #5 赞 0

会报multiple definition的错误

lllc 楼主 1 年前 湖北省 #6 赞 0

明白了,原来是这样。膜拜大佬!!!
@visvlee

lllc 楼主 1 年前 湖北省 #7 赞 0

@phynos 问过chatgpt了,但是它好像没理解我的意思

lllc 楼主 1 年前 湖北省 #8 赞 0

@ycdhqzhiai 会有重复定义的问题

woyouzui 1 年前 湖北省 #9 赞 0

可以放,只要那个h文件只被include一次就行。

sky0014 1 年前 湖北省 #10 赞 0

c 系的引入和构建系统太古老了,难用得一批

mo4772 1 年前 湖北省 #11 赞 0

你学错了吧
怎么不能
不要把C++想复杂了。

lllc 楼主 1 年前 湖北省 #12 赞 0

@ycdhqzhiai 会有重复定义的问题

ycdhqzhiai 1 年前 湖北省 #13 赞 0

@lllc 为什么会有重复问题,你让他没重复不就行了

miao0810 1 年前 甘肃省 #14 赞 0

社区这么多程序员吗

请绑定手机号后,再发言,点击此处
Guozaoke.com—源自武汉的高端交流分享社区
相关主题
根据 GitHub 个人贡献图生成贪吃蛇游戏,有点意思
哪个ai可以结合新闻中的图片和视频帮忙生成指定尺寸的组合图片呀?
做了个世界有趣街景网站,一刷就上瘾
小程序备案要多久
你们现在写游戏,还用unity吗?
感觉chatgpt还是比deepseek和grok强很多
能纯手搓一个全流程神经网络程序,在本版什么水平?
AI还是欠火候
新上线的flux 站点
有没有大佬解下惑,现在大火的AI智能体到底是个啥?

过早客微信公众号:guozaoke • 过早客新浪微博:@过早客 • 广告投放合作微信:fullygroup50 鄂ICP备2021016276号-2 • 鄂公网安备42018502001446号