2016-03-01 121 views
-1

我得到一个编译错误“无法将'芯片'转换为'GroceryItem',我无法确定如何将某些东西实际转换为虚拟类对象教师提供了一个'GroceryCart'类,它添加了GroceryItems在“主”,并打印车从购物车中。虚拟类和继承

class GroceryItem { 
public: 
    virtual ~GroceryItem(); 
    virtual float GetPrice() = 0; 
    virtual char* GetDescription() = 0; 
    virtual float GetWeight() = 0; 
}; 



#include "GroceryItem.h" 

class Chips : public GroceryItem { 
public: 
    Chips(); 
    ~Chips(); 
    float GetPrice(); 
    char* GetDescription(); 
    float GetWeight(); 
private: 
    float price; 
    char* itemName; 
    float weight; 
}; 

#include "GroceryItem.h" 
#include "Chips.h" 

Chips::Chips() { 
    price = 0.75; 
    itemName = new char[5]; 
    itemName = "Chips"; 
    weight = 1.0; 
} 

Chips::~Chips() { 
    delete this; 
} 

float Chips::GetPrice() { 
    return price; 
} 

char* Chips::GetDescription() { 
    return itemName; 
} 

float Chips::GetWeight() { 
    return weight; 
} 



int main(int argc, const char * argv[]) 
{ 
    GroceryCart c; 
    c.AddItemToCart(new Chips); 
    std::cout << c; 
    return 0; 
} 
void GroceryCart::AddItemToCart(GroceryItem *i) 
{ 
    items.push_back(i); 
} 
+0

可以显示GroceryCart AddItemToCart方法吗? – MtRoad

+0

在最下面 – Bobby

+2

您应该在问题中标记语言。 – mattsap

回答

0

提供完整的错误日志,检查该容器与指针参数来GroceryItem(< GroceryItem *>)

正如有人指出的

delete[] itemName; //destructor 

但是你也必须定义非平凡的copy-constructor/operator =,因此最好用std :: string替换char *,也需要定义基本抽象类的析构函数,即使它是纯虚拟的。