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赋值给结构体类型的数组元素,这就触发了类型不匹配的错误。
修复步骤
- 删除重复的变量定义:把
int i, largest = 0, temp;改成int i, largest = 0;,确保temp只代表结构体类型的变量。 - 补全排序逻辑(根据选择排序的常规写法帮你补全了剩余部分):
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
相关产品推荐
相关产品推荐

