Vererbung von Graphics
-
Hi Leute,
Ich selbst habe hier eine Klasse, die von der Grafikklasse Graphics erbt.
Das bedeutete, dass meine Klasse "Mauer" theoretisch nun auch alle Eigenschaften der Klasse Graphics besitzt.
Beispielsweise TBitmap etc...
Leider gibt mir der Compiler bei folgendem Code einen Fehler aus:class Mauer:public Graphics { private: int posx,posy,breite,hoehe; Graphics::TBitmap *mauer; public: int setposx(int); int setposy(int); int setbreite(int); int sethoehe(int); TBitmap setbild(Graphics::TBitmap); }; TBitmap Mauer::setbild(Graphics::TBitmap *m) { mauer=m; return(mauer); } int Mauer::setposx(int px) { posx=px; return(posx); } int Mauer::setposy(int py) { posy=py; return(posy); } int Mauer::setbreite(int b) { breite=b; return(breite); } int Mauer::sethoehe(int h) { hoehe=h; return(hoehe); }Fehler:
http://Jesusfreak777.je.funpic.de/fehler.JPG
Doch es gibt da auch noch andere Fehler- ich würde gerne am Ende mit der setbildfunktion einfach eine Bitmap übergeben lassen.
Bei allen Datentypen geht das- nur bei der Bitmap gibts Ärger
Tschüss
David
-
Edit:
Selbst ohne Vererbung tritt der Fehler auf: setbild ist kein Element von Mauer- obwohl es ja ganz klar ein Element von Mauer ist:
class Mauer { private: int posx,posy,breite,hoehe; Graphics::TBitmap *mauer; public: int setposx(int); int setposy(int); int setbreite(int); int sethoehe(int); Graphics::TBitmap setbild(Graphics::TBitmap); }; Graphics::TBitmap Mauer::setbild(Graphics::TBitmap *m) { mauer=m; mauer = new Graphics::TBitmap; mauer->LoadFromFile("Grafik/Mauer/Mauer 1.bmp"); return(mauer); } int Mauer::setposx(int px) { posx=px; return(posx); } int Mauer::setposy(int py) { posy=py; return(posy); } int Mauer::setbreite(int b) { breite=b; return(breite); } int Mauer::sethoehe(int h) { hoehe=h; return(hoehe); }
-
Ist es nicht. Schau dir mal genau die Parameterliste von setbild an. Kleiner Hinweis *
-
Mhh- das mit der Vererbung brauch ich eigentlich auch nicht so dringend- mir ist halt nur wichtig, dass ich ne Funktion habe, die nicht nur Integerwerte übergeben kann sondern auch Bilder.
Und damit habe ich so meine Probleme.
Mein Code sieht nun wie folgt aus- mein alter Fehler ist weg daber dafür sagt der jetzt, dass TBitmap nicht nach TBItmap umkonvertiert werden kann.
Da muss noch irgendwas falsch sein:Headerdatei:
class Mauer { private: int posy,posx,breite,hoehe; Graphics::TBitmap *ma; public: int setposx(int); int setbreite(int); int sethoehe(int); int setpossy(int); Graphics::TBitmap bild(void); }; Graphics::TBitmap Mauer ::bild(void) { ma = new Graphics::TBitmap; ma->LoadFromFile("Grafik/Mauer/Mauer 1.bmp"); return(ma); } int Mauer::setpossy(int py) { posy=py; return(posy); } int Mauer::setposx(int px) { posx=px; return(posx); } int Mauer::setbreite(int b) { breite=b; return(breite); } int Mauer::sethoehe(int h) { hoehe=h; return(hoehe); }CPP Datei:
Mauer * mauer; //--------------------------------------------------------------------------- __fastcall Teditor::Teditor(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Teditor::FormActivate(TObject *Sender) { editor->Height=Screen->Height; editor->Width=Screen->Width; } //--------------------------------------------------------------------------- void __fastcall Teditor::Beenden1Click(TObject *Sender) { exit(1); } //--------------------------------------------------------------------------- void __fastcall Teditor::bbmauerClick(TObject *Sender) { mauer = new Mauer; editor->Canvas->Draw(mauer->setposx(2),mauer->setpossy(2),mauer->bild()); } //---------------------------------------------------------------------------Bitte guckt nochmal drüber

cya
David
-
Hallo
mein alter Fehler ist weg daber dafür sagt der jetzt, dass TBitmap nicht nach TBItmap umkonvertiert werden kann.
Nein der Fehler heißt genau genommen
TBitmap* kann nicht in TBitmap konvertiert werden
und wird dirch diese Kombination verursacht
Graphics::TBitmap *ma; ... Graphics::TBitmap Mauer ::bild(void) { ... return(ma); }Du must also die Methode einen Pointer übergeben lassen. Und natürlich dafür sorgen, das irgendwo (und zwar an der richtigen Stelle) der reservierte Speicher wieder gelösht wird. Bei dir würde sich der Destruktor von Mauer anbieten (den du dann noch anlegen müßtest)
bis bald
akari
-
Nimm' dir den Hinweis von Braunstein zu Herzen. Wenn du noch nicht verstanden hast, wo der Fehler lag, solltest du erst einmal nicht weiter machen. Mach' erst weiter wenn du es raus hast.
-
Das heißt ich kanns vergessen mit einer Methode ein Bild zurück zu geben?
Ich hatte nur gedacht, wenn ich Zahlen und Strings zurückgeben kann ist es auch kein Problem das Selbe mit Bildern zu tun.
Mein Ziel ist es eigentlich ein Objekt mit den Eigenschaften left, top, hoehe, breite und bildinhalt zu schreiben.
Kann mir eventuell jemand diese Syntax einmal zeigen- ich denke, wenn ich mir das dann ansehe verstehe ich das auch.

-
Hallo
natürlich kannst du auch TBitmap zurückgeben lassen, nur eben als Pointer, und genau das besagt auch die Fehlermeldung
Graphics::TBitmap *ma; ... Graphics::TBitmap* Mauer ::bild(void) // Hier Pointer { ... return ma; // standard-konformer CPP-Style }und denk daran die Bitmap-Instanz nach Gebrauch wieder zu löschen.
bis bald
akari
-
Man wie geil jetzt geht alles- Danke euch
