0
if (sale->taxStatus[i] = "y")  // line 44

产生错误:

y.cpp:44:12: error: request for member taxStatus in sale, which is of non-class type Sale*

我的结构:

struct Sale {
    int quantity[MAX_SALES];
    float unitPrice[MAX_SALES];
    char taxStatus[MAX_SALES]; // MAX_SALES = 10
};

完整的功能:

void total(struct Sale sale[], int sales) {

    int i = 0;
    float subTotal, hst, total = 0;

    for (i = 0; i < sales; i++) {
        subTotal = subTotal + (sale->quantity[i] * sale->unitPrice[i]);
        if (sale->taxStatus[i] = "y")
        {
            hst = hst + ((sale->quantity[i] * sale->unitPrice[i]) * 0.13);
        }
    }

    cout << "\n" << "Subtotal  : " << subTotal << endl;   
    cout << "HST (13%) : " << hst;   
}
4

2 回答 2

4
if (sale->taxStatus[i] == 'y')

正如@jweyrich 和@AustinPhillips 还指出的那样,您需要双等号( == ),并且在单引号中比较字符。

单个等号 ( = ) 用于赋值。

例如s = 5;

双等号 ( == ) 用于检查两个或两个以上值的相等性。

例如if( s == d && d== e && e == f && f == b ) { };

带感叹号 ( != ) 的等号用于检查两个或两个以上值的不等式。

例如if( s != d && d != e && e != f && f != b ) { };

于 2013-01-21T02:55:38.737 回答
0

首先,正如已经提到的,if (sale->taxStatus[i] = "y")是分配而不是比较!

但主要问题是:sale(function parameter) 是一个数组(具有 size sales),但是您将它(在for主体内部)作为Sale*...

正确的访问必须是sale[i]->taxStatus因为i数组内部的索引点sale,而不是taxStatus!(顺便说一句,如果sales > MAX_SALES你会得到 UB)。那么你需要用来strcmp"y"文字进行比较......

于 2013-01-21T03:00:48.323 回答