0

我有一个方法,旨在按照定义的其他方法打印出值。我将发布直接涉及的方法以减少代码。但是,Visual Studio 返回错误

expression must have struct or union type

我的代码如下:

int i;
double cat[12];
#define MAX 3
#define GRAMS 64

struct CatFoodInfo {
    int SKU[MAX], CalPerServ[MAX];
    double price[MAX], lbs[MAX], kg[MAX], grams[GRAMS], servings[MAX], costPerServ[MAX], costPerCal[MAX];
} CatFoodInfo;

void displayReportData() {
    for (i = 0; i < MAX; i++) {
        int sku = cat[i + (3 * i)];
        double price = cat[i + (1 + (3 * i))];
        double lbs = cat[i + (2 + (3 * i))];
        int calPerServ = cat[i + (3 + (3 * i))];
        int kg = cat[kg];
        printf("%07d %10.2lf %10.1lf %10.4lf %9d %8d %8.1lf %7.2lf %7.5lf", sku, price, lbs, kg, cat.grams[i], calPerServ, cat.servings[i], cat.costPerServ[i], cat.costPerCal[i]);

    }
}

上面的代码将返回该错误。我尝试更改printffromcat.grams[i]到的值CatFoodInfo.grams[i]。这消除了错误,但只返回零。

解决这个问题的正确方法是什么,或者我哪里出错了?

4

1 回答 1

1

目前还不太清楚你的目的是什么。

cat是一个双精度数组,它不知道结构CatFoodInfo或其字段,因此cat.grams[i]没有意义。为此,cat应该是 type 的结构CatFoodInfo,例如:

typedef struct { 
   ...
} CatFoodInfo;

CatFoodInfo cat;

但这改变了含义,现在cat不是数组,只有一个 type 元素CatFoodInfo,因此您将遇到代码的其他部分(例如cat[kg])的问题。

但是,要将其cat视为包含元素的数组CatFoodInfo,您需要:

typedef struct { 
   ...
} CatFoodInfo;

CatFoodInfo cat[12];

但同样,您将不得不重写大部分代码,例如cat.grams[i].cat[j].grams[i]

于 2021-03-14T12:03:56.903 回答