You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言报错:无法将int类型赋值给struct protein类型(类型不兼容)

修复结构体数组排序中的类型不匹配错误

嘿,我一眼就看到问题出在哪了!你遇到的这个incompatible types错误,根源是同一个作用域里重复定义了同名变量,导致编译器混淆了变量类型。

问题分析

你在函数里同时定义了两个temp变量:

  • 一个是结构体类型:struct protein temp;
  • 另一个是int类型:int i, largest = 0, temp;

在C语言中,同一个作用域内不能有同名变量,编译器会优先识别后面定义的int类型temp。当你执行protein_powders[largest] = temp;时,你试图把int类型的temp赋值给结构体类型的数组元素,这就触发了类型不匹配的错误。

修复步骤

  1. 删除重复的变量定义:把int i, largest = 0, temp;改成int i, largest = 0;,确保temp只代表结构体类型的变量。
  2. 补全排序逻辑(根据选择排序的常规写法帮你补全了剩余部分):
void selection_sort(struct protein protein_powders[], int n) { 
    struct protein temp; 
    int i, largest = 0; // 移除了重复的temp定义
    if (n == 1) return; 
    // 遍历找到最大元素的下标
    for (i = 1; i < n; i++) { 
        // 假设你是按aver字段降序排序,这里补全比较逻辑
        if (protein_powders[i].aver > protein_powders[largest].aver) {
            largest = i;
        }
    }
    // 交换最大元素到当前数组的末尾
    if (largest != n - 1) {
        temp = protein_powders[largest];
        protein_powders[largest] = protein_powders[n - 1];
        protein_powders[n - 1] = temp;
    }
    // 递归处理剩余的n-1个元素
    selection_sort(protein_powders, n - 1);
}

为什么这样修复?

删除重复的temp定义后,函数里只有一个结构体类型的temp变量,此时你再进行结构体赋值操作,编译器就能正确识别类型,不会再抛出类型不匹配的错误了。

内容的提问来源于stack exchange,提问作者user18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:05:36