keil报错:Symbol set_value multiply define和 incomplete type is not allowed和error: #65: expected a “;“

一个是重复定义,一个是不完整类型,一个是缺一个;

第一个:重复定义,一般最多的就是两个文件中的变量定义重复而报错,一般这种改一下名就差不多了,而另一种就比较难看出来了。比如:定义一个结构体在sys.h的文件中,并在文件中进行了定义和初始化,然后在sys.c文件中调用了定义的结构体,同时因为在.h的文件中,所以在main.c中也可以调用定义的结构体,最后编译报错。因为在.h文件中进行了定义,当被两个.c文件调用后就被重复定义了。

例:
sys.h:
struct xxx
{
 int data;
};

struct xxx xx;

#include"sys.h"
sys.c:

void max(void)
{
    xx.data = 100;
}

#include"sys.h"
main.c:
void min(void)
{
    xx.data = 100;
}
编译会报错,正确的应该把struct xxx xx拿到sys.c的文件中,要在其他位置用的时候extern一下。

第二个问题不完整类型

还是上面的例子:

例:
sys.h:


#include"sys.h"
sys.c:

struct xxx
{
 int data;
};

struct xxx xx;

void max(void)
{
    xx.data = 100;
}

#include"sys.h"
main.c:
void min(void)
{
    xx.data = 100;
}
编译会报错,正确的应该把
struct xxx
{
 int data;
};
拿到sys.h的文件中,要在其他位置用的时候extern一下。

还有一个:error:  #65: expected a ";"

一般就是缺了个;,一般加一个就可以了。

还有一种,在某个.h文件中的最后一句缺了一个分号;。结果这个.h文件被几十个文件调用,就会突然出现几十条问题出来。

  1. Symbol set_value multiply define 这个错误意味着set_value这个符号(通常是变量或函数名)被多次定义了。在C/C++中,每个符号只能有一个唯一的定义。这可能是由于在多个源文件中重复定义了set_value导致的。

    解决方法:

    • 确保在你的代码中只有一个地方定义了set_value,或者将多余的定义删除或注释掉。
    • 如果你在多个源文件中使用了set_value,考虑将它声明为extern,并在一个源文件中定义它。
  2. Incomplete type is not allowed 这个错误表示在某个地方使用了不完全的类型。在C/C++中,你需要在使用类型之前完全定义它,否则编译器无法确定类型的大小和结构。

    解决方法:

    • 确保你在使用结构体、类、联合或枚举之前已经完全定义了它们。如果你使用了不完全类型,检查你的头文件和源文件是否正确包含了相关的定义。
  3. Error: #65: expected a ";": 这个错误表示在代码的某个地方缺少了分号,分号通常用于表示语句的结束。

    解决方法:

    • 查找并添加丢失的分号。编译器通常会提供错误的行号和位置,帮助你找到问题所在。

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浮若于心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值