Использование классов и конструкторов и создание имени объекта с размером массива 3

Я пытаюсь создать объект в основном с массивом из трех. Когда я запускаю его, он отображает желаемый результат, но он дает ошибку, и любой код после этого не запускается. "Необработанное исключение в 0x775FC41F в Grocery.exe: исключение Microsoft C++: std :: bad_alloc в ячейке памяти 0x0036E590."

class GroceryItem {
 public:
 GroceryItem();//default constructor
 GroceryItem(string, ******, int, int); // four argument constructor
 void set_item_name(string); // Assigns a value to the data memeber item_name
 void set_item_price(******); //Assigns a value to the data member item_price
 void set_qty_on_hand(int);// Assigns a value to the data member quantity_on_hand.
 void set_qty_purchased(int); // Sets qty_purchased to zero before a customer begins shopping.
 string get_item_name(); // Returns the value of the data memebr item_name.
 ****** get_item_price(); // Returns the value of the data member item_price
 int get_qty_on_hand(); // Returns the value of the data member quantity_on_hand.
 int get_qty_purchased(); // Retruns the value of the data memebr qty_purchased.
 private:
 string item_name;
 ****** item_price;
 int quantity_on_hand;
 int quantity_purchased;
 };

 GroceryItem::GroceryItem(string name, ****** price, int hand, int purchased){
 set_item_name(name);
 set_item_price(price);
 set_qty_on_hand(hand);
 set_qty_purchased(purchased);
 }
 void GroceryItem::set_item_name(string name){
 item_name = name;
 }
 string GroceryItem::get_item_name(){
 return item_name;
 }
 void GroceryItem::set_item_price(****** price){
 item_price = price;
 }
 ****** GroceryItem::get_item_price(){
 return item_price;
 }
 void GroceryItem::set_qty_on_hand(int hand){
 quantity_on_hand = hand;
 }
 int GroceryItem::get_qty_on_hand(){
 return quantity_on_hand;
 }
 void GroceryItem::set_qty_purchased(int purchased){
 if (purchased > 0)
 quantity_purchased = purchased;
 if (purchased <= 0)
 {
 quantity_purchased = 0;
 cout <<"\n cart cannot be negative, it will be set to 0. \n";
 }
 }
 int GroceryItem::get_qty_purchased(){
 return quantity_purchased;
 }



int main(){
int input;
cout <<"Welcome to KMART\n" << "\nHappy Shopping" << endl;
GroceryItem Kmart("Hello", 1234, 1234, 1);
GroceryItem Kmart2("My", 1234, 1234, 1);
GroceryItem Kmart3[SIZE] = {
 { "John", 1234, 1234, 0 },
 { "Mary", 1234, 1234, 0 },
 { "Kevin", 1234, 1234, 0 }

};
//Kmart("jjj", 12, 123, 1);
for (int i = 0; i < 10; i++){
cout << Kmart3[i].get_item_name() << "\t" << Kmart3[i].get_item_price() << "\t" << Kmart3[i].get_qty_on_hand() << "\t" << Kmart3[i].get_qty_purchased() << endl;
}
cout << "This is fromt eh four argument constructor" << endl;
cout<
<p> }</p>
1 ответ

Вы не поделились с нами значением для SIZE; тем не менее, я предполагаю, что у вас, вероятно, меньше 10. Если это так, то это произойдет позже, когда вы зацикливаетесь через Kmart3.

Выполнение этого изменения должно остановить сбой (по крайней мере, в моем тестировании):

for (int i = 0; i < SIZE; i++)
{
 if (Kmart3[i].get_item_name().length() > 0)
 cout << Kmart3[i].get_item_name().c_str() << "\t" << Kmart3[i].get_item_price() << "\t" << Kmart3[i].get_qty_on_hand() << "\t" << Kmart3[i].get_qty_purchased() << endl;
}

Конечно, есть несколько других вопросов, которые вам нужно будет решить, прежде чем код будет работать, поскольку, на мой взгляд, вы хотите, чтобы он работал; однако, это должно остановить сбой.

licensed under cc by-sa 3.0 with attribution.