簡體   English   中英

為什么我不能在函數中第二次聲明結構?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM