C++新手,自己编译了下,发现只有类的定义能放在头文件中,而变量和函数(non-inline)的定义不行。如题,很困惑。
变量和函数(non-inline)的定义不能放在头文件中,为什么不能???
1、头文件里面想放什么就放什么,甚至可以把源程序全部写到头文件,.C文件只需要include就能编译运行 2、不管你头文件放什么,你要保证全局变量定义只能有一个,但是可以有多个声明 综上,你可以定义变量在头文件,但是你只能有一个.c文件include,否则就重复定义。。。
后面这种简单问题就直接问chatGPT,没必要在论坛问
放在.h文件中的函数一般用static inline修饰,在引用这个.h的.c文件中相当于定义了这个函数,函数作用范围为本文件;如果直接放到.h中,那么如果有两个.c包含这个.h,编译器就会报重复定义,因为这个函数的作用域广了
因为类名不参与链接啊,在类类部实现的构造函数,默认编译器都给你加上了inline,所以链接的时候不存咋符号多重定义的问题,但是变量和函数如果放在头文件,不加上static(内部符号链接,编译单元之间不可见),inline,被多个编译单元包含,就会出现符号多重定义的问题,链接器不知道链接哪一个
会报multiple definition的错误
明白了,原来是这样。膜拜大佬!!! @visvlee
@phynos 问过chatgpt了,但是它好像没理解我的意思
@ycdhqzhiai 会有重复定义的问题
可以放,只要那个h文件只被include一次就行。
c 系的引入和构建系统太古老了,难用得一批
你学错了吧 怎么不能 不要把C++想复杂了。
@lllc 为什么会有重复问题,你让他没重复不就行了
社区这么多程序员吗