没有可行的超载' ='将对象分配给另一个对象时?

时间:2015-10-19 02:53:48

标签: c++ operator-overloading

我尝试过寻找解决方案但这些问题的答案非常具体。这就是我所拥有的。

标题代码。

class InventoryItem {

    public:

        InventoryItem(char *desc = 0, double c = 0, int u = 0);
        ~InventoryItem();

        char *getDescription() const;
        double getCost() const;
        int getUnits() const;

    void operator= (const InventoryItem &right);

    int setUnits;

    private:
        char *description; 
        double cost;        
        int units;        
};

与头文件关联的.cpp文件。

InventoryItem::InventoryItem(char *desc, double c, int u) {
    description = desc;
    cost = c;
    units = u;
}

InventoryItem::~InventoryItem() {}

void InventoryItem::operator= (const InventoryItem &right) {
    units = right.getUnits();
    cost = right.getCost();
    description = right.getDescription();
}

CashRegister类。

class CashRegister {

    public:
    void getItemToPurchase(InventoryItem) const;

    private:
    InventoryItem item;
}

此代码中出现错误,即CashRegister函数的.cpp文件。

void CashRegister::getItemToPurchase(InventoryItem item1) const {

    item = item1;
}

它说"没有可行的操作员" ="即使item和item1都是同一个类的对象。

我已经将我的代码与书中的代码进行了比较,但它仍然无效。

1 个答案:

答案 0 :(得分:3)

问题在于const中的CashRegister成员函数。在CashRegister::getItemOnPurchase()中,itemconst成员。因此

item = item1;

不是一个可行的功能。

我可以想到几种解决问题的方法。

  1. 返回对象

    InventoryItem CashRegister::getItemToPurchase() const {
        return item;
    }
    
  2. 将对象作为输出参数返回。

    void CashRegister::getItemToPurchase(InventoryItem& item1) const {
        item1 = item;
    }
    
  3. 此外,在operator=函数中返回对象的引用更为惯用。

    InventoryItem& operator= (const InventoryItem &right);