【问题标题】:Enumeration for C++ shows an error: "A nonstatic member reference must be relative to a specific object."C++ 的枚举显示错误:“非静态成员引用必须相对于特定对象。”
【发布时间】:2017-04-24 18:22:12
【问题描述】:

所以,我正在编写一个代码来根据银行交易计算金额。 我创建了一个枚举类来识别 SALE = 1、VALUEADDED = 2、CREDIT = 3、CANCEL = 4、PROMO = 5、DISCOUNT =6 和 INTERTERRITORY = 7。

这是一个事务类,TransactionType是枚举。

class transaction {
public:
    enum class TransactionType { sale = 1, valueadded, credit, cancel, promo, discount, interterritory };
    transaction(int transactionId, int salerepId, int transactionType, int amount) {
        this->transactionId = transactionId;
        this->salerepId = salerepId;
        this->transactionType = static_cast<TransactionType>(transactionType);
        this->amount = amount;
    }

    void print() {
        cout << transactionId << "\t\t" << salerepId << "\t\t";
        switch (transactionType)
        {
        case TransactionType::sale:
            cout << "SALE";
            break;
        case TransactionType::valueadded:
            cout << "VALUEADDED";
            break;
        case TransactionType::credit:
            cout << "CREDIT";
            break;
        case TransactionType::cancel:
            cout << "CANCEL";
            break;
        case TransactionType::promo:
            cout << "PROMO";
            break;
        case TransactionType::discount:
            cout << "DISCOUNT";
            break;
        case TransactionType::interterritory:
            cout << "INTERTERRIOTY";
            break;
        default:
            cout << "UNIDENTIFIED";
            break;
        }
        cout << "\t\t" << amount << endl;
    }
    TransactionType transactionType;
private:
    int transactionId;
    int salerepId;
    int amount;

};

下面的代码是我想根据交易类型计算金额。 (Territory_output 是另一个给出金额输出的类,而 salerep::amount 是来自不同类的另一个实例,它给出初始金额。

territory_output tAmount;
if (transaction::transactionType == transaction::TransactionType::sale) {
    tAmount.territoryAmount += salerep::amount * 1.1;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::valueadded) {
    tAmount.territoryAmount += salerep::amount  * 1.1;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::credit) {
    tAmount.territoryAmount -= salerep::amount * 1;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::cancel) {
    tAmount.territoryAmount -= salerep::amount * 1.25;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::promo) {
    tAmount.territoryAmount -= salerep::amount * 0;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::discount) {
    tAmount.territoryAmount -= salerep::amount  *1.1;
    return tAmount.territoryAmount;
}
if (transaction::transactionType == transaction::TransactionType::interterritory) {
    tAmount.territoryAmount += salerep::amount *0.75;
    return tAmount.territoryAmount;
}

我收到错误消息“非静态成员引用必须相对于特定对象。”用于调用 transaction::TransactionType 作为枚举。 我得到了同样的错误“非静态成员引用必须相对于特定对象。”出售代表::数量。 有人可以帮忙吗? 这是一张表的图片,说明了归属。The table of Transaction Type & Attribution Rule

【问题讨论】:

  • 这不是 enum - 你的 transaction 类没有名为 transactionTypestatic 成员
  • 你想用transaction::transactionType 表示什么?

标签: c++ class enums enumeration


【解决方案1】:

如果transactionType 是类的static 成员,transaction::transactionType 将是一个有效的表达式。由于transactionType 是类的非static 成员,因此只能在对象的上下文中使用。

例如

transaction tr;
if (tr.transactionType == transaction::TransactionType::sale) {

您还没有显示salerep 类的定义,但我猜salerep::amount 也遇到了同样的问题。您需要salerep 类型的对象并使用. 语法访问其成员。

salerep rep;

...

if (tr.transactionType == transaction::TransactionType::sale) {
    tAmount.territoryAmount += rep.amount * 1.1;
    return tAmount.territoryAmount;
}

【讨论】:

  • 那么,我是在课堂上还是在主函数中声明transaction tr;
  • @SidaZhang,如果没有minimal reproducible example,我不知道如何回答这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-03-19
  • 2015-06-01
  • 2018-03-26
  • 2016-08-13
  • 2021-05-30
  • 1970-01-01
相关资源
最近更新 更多