繁体   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