2015-10-19 78 views
0

我试过寻找解决方案,但在这些问题的答案是非常具体的。这是我的。将对象分配给另一个对象时,没有可行的重载'='?

标题代码。

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

它说:“没有可行的操作符” =”,即使项目和物品1是同一类的两个对象。

我比我的代码到一个在书,但它仍然没有按”吨工作。

+1

http://stackoverflow.com/help/mcve –

+0

最起码,包括你写的_full_错误信息。更理想的是MCVE会有所帮助。 – TheUndeadFish

+0

完整的错误是“No viable overloaded'='这是所有的程序显示 –

回答

3

问题是与在CashRegisterconst成员函数。在CashRegister::getItemOnPurchase()itemconst构件。因此

item = item1; 

不是一个可行的功能。

我能想到几种方法来解决这个问题。

  1. 返回对象

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

    void CashRegister::getItemToPurchase(InventoryItem& item1) const { 
        item1 = item; 
    } 
    

而且,它更惯用于参考在operator=函数返回的对象。

InventoryItem& operator= (const InventoryItem &right); 
相关问题