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 🙂


Anmelden zum Antworten