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.htmIch 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 }; #endifMensch.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 }; #endifmain.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 ...