Hilfe bei Polymorphie
-
Hallo!
beim ausführen von nachfolgenden Programm bekomm ich immer bei der abschließenden ausgabe aller eingegebenen Werte einen Fehler:
"Im Projekt XY ist eine Exception der Klasse EAccessViolation aufgetreten ..."
Woran kann das liegen?thx im voraus

dekl: #include <iostream.h> #include <conio.h> #include <string.h> class Computer { protected: long nummer; public: Computer(long); ~Computer(); long getNummer() {return nummer;} void setNummer(long nr) {nummer=nr;} virtual void eingabe(); virtual void ausgabe() const; }; class Intel : public Computer { private: int mhz; public: Intel(long, int); ~Intel(); int getMhz() {return mhz;} void setMhz(int m) {mhz=m;} void eingabe(); void ausgabe() const; }; class Amd : public Computer { private: int ram; public: Amd(long, int); ~Amd(); int getRam() {return ram;} void setRam(int r) {ram=r;} void eingabe(); void ausgabe() const; }; impl: #include "computer.h" Computer::Computer(long nr) { nummer=nr; } Computer::~Computer(){} void Computer::eingabe() { cout<<"Nummer: "; cin>>nummer; } void Computer::ausgabe() const { cout<<"Nummer: "<<nummer<<endl; } //////////////////////////////Intel///////////////////////////////////////////// Intel::Intel(long nr, int m): Computer(nr),mhz(m) {} Intel::~Intel(){} void Intel::eingabe() { cout<<"Nummer: "; cin>>nummer; cout<<"Mhz: "; cin>>mhz; } void Intel::ausgabe()const { cout<<"Nummer: "<<nummer<<endl; cout<<"Mhz: "<<mhz<<endl; } //////////////////////////////Amd/////////////////////////////////////////////// Amd::Amd(long nr, int r): Computer(nr),ram(r) {} Amd::~Amd(){} void Amd::eingabe() { cout<<"Nummer: "; cin>>nummer; cout<<"Ram: "; cin>>ram; } void Amd::ausgabe()const { cout<<"Nummer: "<<nummer<<endl; cout<<"Ram: "<<ram<<endl; } main: #include "computer.h" #pragma hdrstop #pragma argsused int main(int argc, char* argv[]) { Computer* pCom[20]; int auswahl, anzahl, i; for(int i=0;i<20;i++) { cout<<"Bitte Wahl treffen"<<endl; cout<<"1 = Intel 2 = AMD"<<endl; cin >>auswahl; if(auswahl<1||auswahl>2) break; switch(auswahl) { case 1: pCom[i] = new Intel(123456, 2000); pCom[i]->eingabe(); break; case 2: pCom[i] = new Amd(1234, 512); break; } } anzahl=i; for(i=0;i<anzahl;i++) { pCom[i]->ausgabe(); } delete pCom; getch(); return 0; }
-
Du deletest pCom, aber pCom ist ein Array auf dem Stack. Das führt zum Absturz. Du musst schon die Einträge in pCom einzeln deleten und das Aufräumen des Stacks dem normalen Gang der Dinge überlassen ...
-
Danke für die Antwort - aber wie mache ich das genau?
-
Hallo
for(i=0;i<anzahl;i++) { delete pCom[i]; }bis bald
akari
-
thx

aber der Fehler tritt immernoch auf ...
-
Mr. Blonde schrieb:
aber der Fehler tritt immernoch auf ...
Im main gibt es zweimal die Variable 'i'.
Einmal hierint main(int argc, char* argv[]) { Computer* pCom[20]; int auswahl, anzahl, i; // 'i' ist hier nicht initialisiertund hier
for(int i=0;i<20;i++) {nachdem die for-Schleife zu Ende ist, benutzt Du i wieder; diesmal die unitialisierte .. und da kann sonstwas drin stehen, aber wahrscheinlich nicht 20.
Dass Du das
delete pCom;ganz weglassen musst, hast Du schon richtig verstanden - oder?
Gruß
Werner