为什么我不能在功能中第二次声明结构?

时间:2017-02-22 20:08:10

标签: c struct compiler-errors declaration

所以,我得到了一个函数,我声明一个已填充的结构,并且还要声明一个新函数。当我在顶部声明新函数时它起作用,当我在逗号(,)之后将它声明在同一行时,它可以工作,但它不会在底线上工作。有什么解释吗?提前谢谢。

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;
        }
    }
}

1 个答案:

答案 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];