尘世- 2024-03-18 21:21 采纳率: 85%
浏览 16

C语言枚举数据类型初始化问题

在做一个基于STM32F103C8T6的AS608红外指纹模块的小项目。获取了指纹ID但是需要映射一下使用枚举进行定义但是无论怎么修改数据类型都有问题。

    typedef struct    
{
       char str[64];
     const char * username;
} FingerprintMap;

// 定义映射表
FingerprintMap fingerprint_map[] = 
{
    {1, "User1"},
    {2, "User2"},
    {3, "User3"},// 添加更多的指纹ID和用户名
};

User\main.c(40):错误:#144:“char *”类型的值不能用于初始化“int”类型的实体
User\main.c(44):错误:#144:“char *”类型的值不能用于初始化“char”类型的实体
类似以上的两种错误,希望给予修正和解决方案。补充:chat GPT 也没有解决。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-18 21:21
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据错误提示,可以看出是数据类型不匹配导致的错误。具体来说,就是在定义映射表时,给出的指纹ID是int类型,但是在FingerprintMap结构体中使用的是char类型,因此会导致类型不匹配的错误。 解决方案:
    1. 将FingerprintMap结构体中str字段的类型改为int类型,即将char str[64]改为int str。
    2. 在定义映射表时,给出的指纹ID改为char类型,即将{1, "User1"}改为{'1', "User1"}。 示例代码: typedef struct { int str; const char * username; } FingerprintMap; // 定义映射表 FingerprintMap fingerprint_map[] = { {'1', "User1"}, {'2', "User2"}, {'3', "User3"}, // 添加更多的指纹ID和用户名 }; 通过以上的修改,就可以避免类型不匹配的错误,并成功定义映射表。
    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日