Klassen
-
Hallo,
ich möchte gerne ein Objekt anlegen der Klasse TBaugrundstück und dies soll die Eigenschaften der Klasse TGrundstück ebenfalls annehmen.Ich bekomme immer die Fehlermeldung:
[C++ Fehler] Main.cpp(30): E2285 Keine Übereinstimmung für 'TBaugrundstueck::TBaugrundstueck(int,int,char *,char *,int)' gefunden
Dabei sollte es doch 'TBaugrundstueck::TBaugrundstueck(float,int,char *,char *,int)' sein.
Hier nun der Quelltext:
main.cppint main(int argc, char* argv[]) { TBaugrundstueck X(5000,3400,"300","Lagerhalle",999000); X.Ausgabe3(); getch(); return 0; }
TGrundstueck.cpp
#include <iostream.h> #include <conio.h> #include <vcl.h> #pragma hdrstop #include "TGrundstueck.h" #pragma package(smart_init) //****************************************************************************** TGrundstueck::TGrundstueck() { wert=100; flaeche=0; beschreibung=NULL; flurstueck=NULL; } //****************************************************************************** TGrundstueck::TGrundstueck(float flaeche1, char *flurstueck1, char *beschreibung1, float wert1) { setflaeche(flaeche1); flurstueck=new char[strlen(flurstueck1)+1]; strcpy(flurstueck,flurstueck1); beschreibung=new char[strlen(beschreibung1)+1]; strcpy(beschreibung,beschreibung1); setwert(wert1); } //****************************************************************************** //Dekonstruktor TGrundstueck::~TGrundstueck() { delete [] flurstueck; delete [] beschreibung; } //****************************************************************************** //Setter und Getter void TGrundstueck::setflaeche(float flaeche1) { flaeche=flaeche1; } //****************************************************************************** float TGrundstueck::getflaeche() { return flaeche; } //****************************************************************************** void TGrundstueck::setwert(float wert1) { wert=wert1; } //****************************************************************************** float TGrundstueck::getwert(void) const { return wert; } //****************************************************************************** int TGrundstueck::Ausgabe() { return wert; } void TGrundstueck::Ausgabe2(void) const { cout<<"\n"; cout<<"Flurstueck: "<<flurstueck<<"\n"; cout<<"Beschreibung: "<<beschreibung<<"\n"; cout<<"Flaeche: "<<flaeche<<"\n"; cout<<"Wert: "<<wert<<" Euro\n"; cout<<"\n"; }
TGrundstueck.h
#ifndef TGrundstueckH #include "TObjekt.h" #define TGrundstueckH //--------------------------------------------------------------------------- #endif class TGrundstueck: public TObjekt { public: TGrundstueck(); //Klassen Konstruktor TGrundstueck::TGrundstueck(float,char *,char *,float); ~TGrundstueck(); //Klassen Dekonstruktor int Ausgabe(); void Ausgabe2() const; private: int wert; float flaeche; char* flurstueck; char* beschreibung; void setflaeche(float); float getflaeche(); void setwert(float); float getwert(void) const; };
TBaugrundstueck.cpp
#include <vcl.h> #include <iostream.h> #include <conio.h> #pragma hdrstop #include "TGrundstueck.h" #include "TBaugrundstueck.h" //--------------------------------------------------------------------------- #pragma package(smart_init) TBaugrundstueck::TBaugrundstueck() { bauland=0; } TBaugrundstueck::TBaugrundstueck(float bauland1):TGrundstueck(flaeche1, flurstueck1, beschreibung1, wert1) { setbauland(bauland1); } TBaugrundstueck::~TBaugrundstueck() { } int TBaugrundstueck::Ausgabe() { return TGrundstueck::Ausgabe()+100; } //****************************************************************************** //Setter und Getter void TBaugrundstueck::setbauland(float bauland1) { bauland=bauland1; } //****************************************************************************** float TBaugrundstueck::getbauland() { return bauland; } //****************************************************************************** void TBaugrundstueck::Ausgabe3(void) const { cout<<"\n"; cout<<"Bauland: "<<bauland<<"\n"; cout<<"\n"; }
TBaugrundstueck.h
#ifndef TBaugrundstueckH #define TBaugrundstueckH //--------------------------------------------------------------------------- #endif class TBaugrundstueck:public TGrundstueck { public: TBaugrundstueck(); TBaugrundstueck(float): TGrundstueck(float, char *,char *,float); ~TBaugrundstueck(); int Ausgabe(); void Ausgabe3() const; private: float bauland; void setbauland(float); float getbauland(); };
Ich glaube ich habe einen Fehler bei der Vererbung gemacht, bekomme den aber nicht raus.
Könnt ihr mir helfen ?
Vielen Dank
-
Kurz vorweg, habe den Code nur überflogen...
Dabei sollte es doch 'TBaugrundstueck::TBaugrundstueck(float,int,char *,char *,int)' sein. gefunden
Wieso das denn? Der Compiler beschwert sich doch über den falschen Kostrukturaufruf in main(). Und dieser lautet nunmal so wie in der Fehlermeldung.
D.h. wenn dann sollte der Ctor Aufruf doch so lauten:
TBaugrundstueck X(float_value)
Und du solltest in diesem Konstruktur auch noch den Basisinitialisierer entfernen oder dem Konstruktur auch für den Basisinitialisierer noch entsprechende Parameter geben.
Caipi
-
Aber ich sage ihm doch:
class TBaugrundstueck:public TGrundstueck { public: TBaugrundstueck(); TBaugrundstueck(float): TGrundstueck(float, char *,char *,float); ...
und in der Main rufe das auf mit :
TBaugrundstueck X(5000,3400,"300","Lagerhalle",999000);
-
versuchs vielleicht mal mit
TBaugrundstueck X(5000.0,3400,"300","Lagerhalle",999000);
er sagt ja eben, dass es keinen konstruktor mit nem int als erstes argument gibt. du willst aber einen konstruktor aufrufen, der ein int als erstes argument hat...
-
Mike_2004 schrieb:
Aber ich sage ihm doch:
class TBaugrundstueck:public TGrundstueck { public: TBaugrundstueck(); TBaugrundstueck(float): TGrundstueck(float, char *,char *,float); ...
Und funktioniert es bei dir? Der eine Ctor in TBaugrundstueck sollte imho so ähnlich lauten:
TBaugrundstueck::TBaugrundstueck(float x, float y, char* str1, char* str2, float z ) : TGrundstueck(y, str1, str2, z) { setbauland(x); }
lauten. So rufst du nämlich den Basisinitialisierer auch mit korrekten Parametern auf.
und in der Main rufe das auf mit :
TBaugrundstueck X(5000,3400,"300","Lagerhalle",999000);Jetzt kannst du in main() auch dies schreiben.
Schau dir am besten nochmal ein paar Seiten zu den Themen Vererbung insbesondere Basisinitialisierer an.
MamboKurt schrieb:
versuchs vielleicht mal mit
TBaugrundstueck X(5000.0,3400,"300","Lagerhalle",999000);
er sagt ja eben, dass es keinen konstruktor mit nem int als erstes argument gibt. du willst aber einen konstruktor aufrufen, der ein int als erstes argument hat...
Das tut AFAIK nichts zur Sache.
Caipi