Konstruktor, Destruktor...



  • Hi,

    ich muss wiedermal was für die UNI Programmieren, leider hab ich grad ein Problem bei Klassen, eher gesagt bei dem Konstruktor und Destruktor.

    Erstmal die Aufgabenstellung:
    http://www.fbi.h-da.de/fileadmin/personal/j.arz/PG2/PG2-SS06-Aufgabe3.htm

    Ich hab noch nicht viel programmiert, aber wollte es schonmal testen ob der Konstruktor oder Destruktor geht, leider bekomme ich diese Fehlermeldung hier.

    1>xxx\frau.cpp(10) : error C2512: 'Mensch' : no appropriate default constructor available

    Hier mein Code bis jetzt:

    Frau.cpp

    #include <iostream>
    #include "frau.h"
    #include "mann.h"
    #include "mensch.h"
    
    using namespace std;
    
    Frau::Frau(char *n)
    {
    
    	name = new char(80);
    	name = n;
    
    }
    
    Frau::~Frau(){}
    

    frau.h

    #ifndef header_frau
    #define header_frau
    
    #include "Mensch.h"
    
    class Frau : public Mensch						// Klasse Frau der Ausbaustufe 2
    {
    public:
                   Frau(char *);					// Konstruktor, der den Namen des Menschen als String mitbringt
                   virtual ~Frau( );				// Destruktor
                   void kind (int, char *);			// Erzeugung (= Geburt) des n-ten Kindes mit Namen
                   void heirat(char *);				// Heirat mit dem Mann mit dem mitgegebenen Namen
                   void stirbtKind(int);			// Tot des n-ten Kindes (n als int-Parameter)
                   void stirbtEhemann(void);		// Tot des Ehemanns
                   void zeige(void);				// Zeigt Ehemann und Kinder (soweit existieren) auf dem Bildschirm 
    
    protected:
                   Mensch * ehemann;				// Zeiger auf den Ehemann; 0, falls nicht vorhanden
                   Mensch * kinder[10];				// Array von Zeigern auf die Kinder; 0, falls nicht vorhanden
    };
    
    #endif
    

    Mensch.h

    #ifndef header_mensch
    #define header_mensch
    
    class Mensch								// Klasse Mensch der Ausbaustufe 2
    {
    public: 
                   char * getName( );			// Returnt einen Zeiger auf den Namen
                   Mensch(char *);				// Konstruktor, der den Namen als String mitbringt
                   virtual ~Mensch( );			// Destruktor
    
    protected:
                   char *name;//[80];				// Der Name (Vor- und Zuname eines Menschen) als String
    };
    
    #endif
    

    main.cpp

    #include <iostream>
    #include "frau.h"
    #include "mann.h"
    #include "mensch.h"
    
    using namespace std;
    
    void main()
    {
    
    }
    

    in den anderen Files steht noch nichts drinnen, daher brauche ich sie auch nicht zu posten.

    Woran liegt jetzt der fehler, ich dachte man kann so den konstruktor aufrufen?

    Besten Dank.

    VLG,
    Cyrill



  • Du hast den Konstruktor für Mensch zwar schon deklariert, aber noch nicht implementiert.



  • <Mod>Code entfernt!</Mode>



  • Was für ein Held ...



  • da war ja einer kreativ .... armer Kerl

    ich meine, in der frau.h muss nach dem Konstruktor der Klasse frau mit ':' explizit angegeben werden , welcher Basisklassenkonstruktor aufgerufen werden muss.



  • schöner code von hi...

    Hast aber schnell gecoded 🙂

    ich werd's mal probieren...

    wußte nicht genau wie ich das machen soll, wegen der klasse mensch.

    Ich meld mich wieder wenn es nicht klappt...



  • Frau::Frau(char *n) 
    { 
    
        name = new char(80); 
        name = n; 
    
    }
    

    Du solltest nochmal überlegen was das genau macht... Wahrscheinlich wolltest du schreiben:

    name= new char[80];

    Und wenn du den Inhalt von n nach name kopieren willst, musst du das auch anders machen.

    Ach ja, delete im Destruktor nicht vergessen 😉



  • DarthZiu schrieb:

    Du hast den Konstruktor für Mensch zwar schon deklariert, aber noch nicht implementiert.

    Wie mache ich das genau?

    Ich hab mir mal den Code von meinen Studienkollegen angeschaut und die machen das genauso:

    mensch.cpp

    // Mensch.cpp: implementation of the Mensch class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #include "Mensch.h"
    #include "Frau.h"
    #include <string>
    #include <iostream>
    using namespace std;
    
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    
    Mensch::Mensch() { }
    
    Mensch::Mensch(char * n)
    {
    name = new char (80); name = n;
    vermoegen = 0.0;
    waehrung = new char (3); waehrung = "EUR";
    }
    
    Mensch::~Mensch() { }
    
    char * Mensch::get_name(void) { return name; }
    
    void Mensch::set_name(char * n) { name = n; }
    
    double Mensch::get_vermoegen(void) { return vermoegen; }
    
    char * Mensch::get_waehrung(void) { return waehrung; }
    
    void Mensch::set_vermoegen(double v, char * w) { vermoegen = v; waehrung = w; }
    

    frau.cpp

    Frau::Frau(char * n) { name = new char (80); name = n; }
    
    Frau::~Frau() { }
    

    Wenn unser prof nur mal beispiele in sein skript machen könnte 😞



  • also das hat jetzt nur gefehlt... lol

    Mensch::Mensch() { }
    
    Mensch::~Mensch() { }
    

    *schlagmichtot*



  • DragonShaolin schrieb:

    also das hat jetzt nur gefehlt... lol

    Sag ich doch 🙂

    DragonShaolin schrieb:

    *schlagmichtot*

    Noch nicht ...


Anmelden zum Antworten