Witam.
Mam napisać prosty kalkulator używając klas. Gdy wykona się działanie, program ma pytać czy wykonać kolejne działanie. Jeżeli tak, ma być tworzony kolejny obiekt i wszystko ma lecieć od nowa.
Mój problem polega na tym, że podczas wykonywania działania w drugim obiekcie (dokładnie podczas podawania znaku działania) debugger wyrzuca błąd i nic nie da się zrobić.
Błąd:
First-chance exception at 0x00f6159b in Kalkulator.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x00f6159b in Kalkulator.exe: 0xC0000005: Access violation writing location 0x00000000.
Kod programu:
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
char CMD;
int tab;
class kalkulator{
public:
int a;
int c;
int d;
string b;
int glowna(){
cout << "Podaj pierwsza liczbe: ";
cin >> a;
cout << "\nPodaj znak dzialania: ";
cin >> b;
cout << "\nPodaj druga liczbe: ";
cin >> c;
if (b == "+"){
dodawanie();
}
else if (b == "-"){
odejmowanie();
}
else if (b == "*"){
mnozenie();
}
else if (b == "/"){
dzielenie();
}
else {
cout << "\n--NIE MA TAKIEGO DZIALANIA--";
}
return false;
}
private:
int dodawanie(){
d=a+c;
cout << "\nWynik: " << d;
return false;
}
int odejmowanie(){
d=a-c;
cout << "\nWynik: " << d;
return false;
}
int mnozenie(){
d=a*c;
cout << "\nWynik: " << d;
return false;
}
int dzielenie(){
if (c == 0){
cout << "Nie dzielimy przez 0!";
}
else {
d=a/c;
cout << "\nWynik: " << d;
}
return false;
}
};
int petla(){
cout << "\n\n-=Czy chcesz wykonac jeszcze jedno dzialanie? (T/N)=-";
poczatek:
CMD = getch();
switch(CMD){
case 'T':{
system("cls");
tab++;
kalkulator* kalkul=(kalkulator*)malloc(sizeof(kalkulator)*tab);
kalkul[tab].glowna();
petla();}
break;
case 't':{
system("cls");
tab++;
kalkulator* kalkul=(kalkulator*)malloc(sizeof(kalkulator)*tab);
kalkul[tab].glowna();
petla();}
break;
case 'n':
exit(0);
break;
case 'N':
exit(0);
break;
default:
goto poczatek;
break;
}
}
void main(){
kalkulator kalku;
kalku.glowna();
petla();
}
Proszę o pomoc.