Ableitungsproblem
-
Ich habe hier ein Beispielprogramm was ich einfach nicht zum laufen kriege.
Der Compiler meldet mir folgenden fehler
ABasis« ist eine nicht erreichbare Basis von »klasse«Hier der Qullcode
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; class ABasis { public: ABasis() { buffer = new char[strlen("Hallo")+1]; strcpy(buffer ,"HALLO"); } virtual ~ABasis() { delete buffer; } ABasis(const ABasis & ab) { buffer = new char[strlen(ab.buffer)+1]; strcpy(buffer,ab.buffer); } protected: virtual char * getString()const = 0; char *buffer; }; class klasse:ABasis { public: klasse() { buffer = new char[strlen("HALLO2")+1]; strcpy(buffer,"Hallo2"); } ~klasse() { delete buffer; } klasse(const klasse & a) { buffer = new char[strlen(a.buffer)+1]; strcpy(buffer,a.buffer); } protected: char *getString()const { return buffer; } }; int main() { ABasis * basis; klasse * kla; basis = kla; return 0; }Hat jemand ne Idee woran das liegt und wie ich diesen Fehler beseitigen kann
-
class klasse: public ABasis
klasse sollte übrigens besser die Finger von buffer lassen. Ich hoffe, dir ist klar, dass beide Konstruktoren aufgerufen werden, wenn du ein klasse-Objekt anlegst (Speicherleck), und dass beide Destruktoren aufgerufen werden, wenn ein klasse-Objekt zerstört wird (vermutlich Crash wg. doppeltem delete).
-
mal anz abgesehn davon dass du in deinem Hauptprogramm zwei nichtinitialisierte Zeiger einander zuweist. Das hat bestenfalls keinen Sinn, schlimmstenfalls bei Erweiterung des Programms einen Crash zur Folge
