C++的枚举显示错误:“非静态成员引用必须相对于特定对象。”

问题描述:

所以,我正在编写一个代码来计算基于银行交易的金额。 我创建了一个枚举类来标识SALE = 1,VALUEADDED = 2,CREDIT = TransactionType是枚举。C++的枚举显示错误:“非静态成员引用必须相对于特定对象。”

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作为枚举进行调用。 和我得到相同的错误“非静态成员引用必须相对于特定的对象。” for salerep ::金额。 有人可以帮忙吗? 这是表格的图片,用于说明归属。 The table of Transaction Type & Attribution Rule

+0

它不是'enum' - 你'transaction'类没有名为'transactionType' – UnholySheep

+0

你想指与'交易:: transactionType'什么'static'会员? – user463035818

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

E.g.

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

所以,我在课堂上还是在主要功能中陈述'transaction tr;'。 –

+0

@SidaZhang,我不知道如何在没有[mcve]的情况下回答这个问题。 –