问题记录:multiple definition of `xxxx` 问题解决 && struct定义类的error:“unknown type name“

一、multiple definition of xxxx 问题解决

问题背景

我在一个头文件里面定义了一个变量,并赋予初值,然后再两个.c 文件里引入了这个头文件,结果就报错 multiple definition of xxxx 错误

在这里插入图片描述

在这里插入图片描述


问题排查:

在一个.h文件中定义了一个变量,而这个.h文件被多个文件包含,单独编译都没有问题,但是到链接的时候就出现问题了。在多个.o文件中包含此代码。最后在编译器链接的时候,就会将工程中所有的符号整合在一起,由于文件中有重复的变量,于是就会出现重复定义的错误,系统就是提示你“multiple definition of xxx


解决办法:

我看百度写的基本都是在头文件.h所有的变量声明前加上 extern 可以解决问题, 但是我这里依旧无效。 后来我就想试试用 static 关键字定义静态全局变量,看是否能解决, 结果问题还真就解决了!

定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。

在这里插入图片描述
编译无报错,问题解决!

在这里插入图片描述


二、struct定义类的error:“unknown type name"

问题背景:

结构体定义如下:

在这里插入图片描述

我在window系统里编写C语言代码,对于一个函数中结构体作为参数是这么写的

在这里插入图片描述
程序编译通过,无报错信息


当我转到 linux 系统里再次运行上述代码时报如下错误:
在这里插入图片描述


原因分析:

这种直接用gcc编译的代码,无法直接将 Player 识别成一个结构体,需要加上 struct 关键字。也许是windows的编译器有代码优化编译的功能,能不写 struct 也能编译。正确写法就是要加上 struct 关键字。


解决办法:

加上 struct 关键字

在这里插入图片描述

程序编译通过,无报错信息

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0rta1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值