所以,我得到了一个函数,我声明一个已填充的结构,并且还要声明一个新函数。当我在顶部声明新函数时它起作用,当我在逗号(,)之后将它声明在同一行时,它可以工作,但它不会在底线上工作。有什么解释吗?提前谢谢。
void CFilter(float avgprofit, int lines)
{
//client goodclient[MAX_CLIENT]; THIS WOULD COMPILE
client client[MAX_CLIENT], goodclient[MAX_CLIENT]; // THIS COMPILES
//client goodclient[MAX_CLIENT]; THIS WOULDN'T COMPILE
int i, amount = 0;
float userprofit;
for (i = 0; i <= lines; i++) {
userprofit = client[i].loses - client[i].wins;
if (userprofit >= avgprofit) {
client[i].goodclient = 1;
} else {
client[i].goodclient = 0;
}
}
}
答案 0 :(得分:5)
问题是数组client
的名称隐藏了client
类型的名称。
client client[MAX_CLIENT];
client goodclient[MAX_CLIENT];
因此,在第二个声明中,编译器将名称client
视为数组的名称。
对不同的实体使用相同的名称并不是一个好主意。
使编译器编译声明的最简单方法是重命名数组。
或者,如果类型client
是具有相同名称的结构类型的typedef
,那么您可以编写例如
client client[MAX_CLIENT];
struct client goodclient[MAX_CLIENT];
另一种方法是交换声明
client goodclient[MAX_CLIENT];
client client[MAX_CLIENT];