Я пытаюсь написать супер базовую программу, которая создает массив объектов класса Receipt
. Класс включает int price, string good (name) и простую функцию, которая добавляет элемент в список. Я застрял, потому что каждый раз, когда я компилирую его, происходит сбой seg, прежде чем он попадает в функцию добавления, что означает, что что-то не так с моим конструктором по умолчанию.
Я все еще новичок в C ++, и указатели, вероятно, моя самая большая борьба. Я посмотрел в Интернете и на своих лекциях, пытаясь выяснить, что я делаю неправильно. Я чувствую, что это что-то маленькое, но я не могу понять это.
Вот моя программа:
#include <iostream>
#include <string>
using namespace std;
class Receipt {
private:
int price;
string good;
Receipt* goods[500]; //partially filled array
public:
Receipt();
void add(string name, int cost);
string getName();
int getPrice();
void setName(string name_in);
void setPrice(int price_in);
void displayList();
};
Receipt::Receipt()
{
for (int i=0; i < 500; i++)
{
goods[i]->setName("Empty");
goods[i]->setPrice(-1);
}
}
void Receipt::add(string name, int cost)
{
int place=0;
for (int i=0; i <500; i++)
{
if (goods[i]->getName()=="Empty" && goods[i]->getPrice()==-1)
{
place = i;
break;
}
}
goods[place]->setName(name);
goods[place]->setPrice(cost);
}
int Receipt::getPrice()
{
return price;
}
string Receipt::getName()
{
return good;
}
void Receipt::setName(string name_in)
{
good = name_in;
}
void Receipt::setPrice(int price_in)
{
price = price_in;
}
void Receipt::displayList()
{
//just displaying first item in list for debugging purposes
cout << goods[0]->getName() << endl << goods[0]->getPrice();
}
int main()
{
Receipt mine; //seg faults here
mine.add("banana", 50);
mine.displayList();
return 0;
}