[英]Why can't I declare structure 2nd time in function?
因此,我得到了一個函數,該函數在其中聲明一個已填充的結構,並且還想聲明一個新函數。 當我在頂部聲明新函數時,當我在逗號(,)之后的同一行中聲明它時,它起作用,但在底行中卻不起作用。 有什么解釋嗎? 提前致謝。
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;
}
}
}
問題在於數組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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.