Регистрация
20 Авг 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Вылетает предположительно из-за вот этих строк:
bAll = new Buy[n];
bAll[n].SetCost(Cost);
bAll[n].SetName(Name);

Сам код программы:
#include
#include
using namespace std;

class Buy
{
private:
int* iCost;
string* sName;
public:
Buy()
{
iCost = new int;
*iCost = 0;
sName = new string;
*sName = "Help me";
}

int GetCost()
{
return *iCost;
}

string GetName()
{
return *sName;
}
void SetCost(int Cost)
{
*iCost = Cost;
}
void SetName(string Name)
{
*sName = Name;
}
};

int main()
{
cout << "Type help for help\n";
int n = 1;
int Cost = 0;
string Talk;
string Name = "Fix Me";

Buy* bAll;

while (true)
{
cin >> Talk;
if (Talk == "help")
{
cout << "create - new product\n";
cout << "show - get product\n";
}
else if (Talk == "create")
{
cout << "Cost: ";
cin >> Cost;

cout << "Name: ";
cin >> Name;

bAll = new Buy[n];
bAll[n].SetCost(Cost);
bAll[n].SetName(Name);
}
else if (Talk == "show")
{
cout << "Cost of " << bAll[n].GetName() << " is " << bAll[n].GetCost() << '\n';
}
}
}
 
Ну как так то. вот создаешь ты массив классов bAll = new Buy[n]; где переменная n допустим равна 10 и соответственно номер первого элемента массива "0" а десятого "9" , а ты пытаешься чтото делать с одиннадцатым элементом которого вообще не существует bAll[n].SetCost(Cost); bAll[n].SetName(Name); если тебе нужен всего один объект класса, а не массив из нескольких то делай так bAll = new Buy(); bAll->SetCost(Cost); bAll->SetName(Name);
 
чуток поругаюсь на всякое разное iCost -- нафига там указатель и возня с выделением памяти? достаточно обычного int. -- void SetName(string Name) { *sName = Name; } сравни с более удобочитаемым void SetName(string Name){*sName = Name;} учебники учат выносить скобку в отдельную строку, но на практике удобнее "одно действие -- одна строка" иначе, пока пролистаешь экран, забываешь что было в начале -- нет ни одного delete -- как выделенная память освобождается?
 
Назад
Сверху