problem mit TImage im einer klasse erzeugen
-
hi,
hätt da wieder son kleines problem.
und zwar wenn ich im konstruktor der classe huhn ein TImage erstellen will, dass ich schon im private der form start als zeiger deklariert hab.
=>class TfmStart : public TForm { __published: // Von der IDE verwaltete Komponenten private: // Anwender-Deklarationen TImage *Huhn_img[10]; // zeiger des typ TImage TTimer *Huehner_timer; public: // Anwender-Deklarationen // in der Zeile mit dem pfeil(->) kommt die fehlermeldung: // "[C++ Fehler] HP.cpp(27): E2285 Keine Übereinstimmung für // 'TImage::TImage(huhn * const)' gefunden" huhn::huhn(void) // konstruktor d. klasse huhn { nr = Anzahl; -> Huhn_img[nr] = new (TImage)(this); // image erstellen & einstellen Huhn_img[nr]->Height = 50; Huhn_img[nr]->Width = 50; Huhn_img[nr]->Parent = this; Huhn_img[nr]->Picture->LoadFromFile("huhn.bmp"); " Huhn_img[nr]->Transparent = true; Anzahl++; }
könnte es sein das ich in der klasse huhn des TImage schon anmelden muss??
mfg johony
Edit:
Bitte die Code-Tags benutzen. Danke!
-
Hi,
Der Ctor von TImage verlangt entweder eine const Referenz auf TImage oder einen Zeiger auf ein TComponent. Du übergibst aber einen Zeiger auf eine Instanz der Klasse Huhn. Deswegen gibt der Kompiler den Fehler aus.
-
Vor allem ist Huhn_img ein Member von TfmStart. Du bringst da 2 Klassen durcheinander.
-
also ich hab jetzt den zeiger auf TIMage in der klasse huhn im private programmiert, jedoch kommt immer noch der gleiche fehler.
kann des sein dass ich anstatt dem this etwas anderes übergeben muss??Huhn_img[nr] = new (TImage)(this);
außerdem hab ich auch mal probiert des private der klasse TfmStart zu erben,
weil des müsste ja auch gehen wenn ich dann in TfmStart noch eine methode erstelle die mir das TImage irgendwie zurückgibt!da noch n ziemlicher noob ich so sachen bin, wäre es net wenn mir des jemand zeigen könnte.
und was is eingentlich ein Ctor???
thx johony
-
- Wieso schreibst du den Typenbezeichner (TImage) in Klammern?
- Arbeite nochmals die Grundlagen der Zugriffslevel (protected, private, public) durch. -> Grundlagen Pauken
- CTor = Constructor. Wenn dir das nichts sagt -> Grundlagen Pauken
Das reicht vermutlich mal fürs Erste.
-junix
-
klar sagt mir construktor was(wird beim erzeugen einer instanz einer klasse ausgeführt), und des mit den klammern hat mir mein lehrer so gesagt und als ich des spiel ohne klassen soweit zum laufen hatte gieng des auch.
klar hast schon recht, ich sollte die grundlagen mal richtig durchgehen (beim graphischen), nur hab ich momentan nicht wirklich die zeit dazu(muss danach gucken das des bis in nem monat gescheit läuft).
Danach hab ich mehr als genug Zeit und werd mir des auf jeden fall mal gescheit durcharbeiten. (hab s n buch)
außerdem ham wir bis jezt in der schule fast nur console geproggt hab.fänds trotzdem cool wenn mir da jemand helden könnte.
mfg johony
-
also bis jetzt hab ich rausgefunden dass ich
des so schreiben muss:Huhn_img[nr] = new TImage(TfmStart *Owner); // image erstellen & einstellen Huhn_img[nr]->ManualDock(); // hier weiß ich nicht was ich übergeben muss,
bool __fastcall ManualDock(TWinControl* NewDockSite, TControl* DropControl = (TControl*) NULL, TAlign ControlSide = alNone);
des hab ich gefunden, nur ich fang eigentlich nichts mit des bezeichnungen an,
außer dass die irgendwie die position(andockstandart... ) oder so ähnlich festlegt.
-
johony schrieb:
also bis jetzt hab ich rausgefunden dass ich
des so schreiben muss:Huhn_img[nr] = new TImage(TfmStart *Owner); // image erstellen & einstellen
Falsch.
johony schrieb:
Huhn_img[nr]->ManualDock(); // hier weiß ich nicht was ich übergeben muss,
bool __fastcall ManualDock(TWinControl* NewDockSite, TControl* DropControl = (TControl*) NULL, TAlign ControlSide = alNone);
des hab ich gefunden, nur ich fang eigentlich nichts mit des bezeichnungen an,
außer dass die irgendwie die position(andockstandart... ) oder so ähnlich festlegt.Was sagt die Hilfe zur Funktion?
-junix
-
sry, aber des ganze zeug in der hilfe sagt mir noch nicht allzu viel.
könntest du mir vielleicht kurz schreiben wie des geht, falls du des grad weißt.
wäre echt super.johony
-
a) Lies mal endlich den FAQ-Artikel zum Thema "Komponenten zur Laufzeit erzeugen"!
b) Hab ich grad keine BCB Hilfe zur Hand. Poste einfach die konkreten Abschnitte die du nicht verstehst, mit einer Erklärung, was du nicht verstehst, und ich erklärs dir. (jetzt aber nicht den ganzen Hilfe-Text posten!)-junix
-
Ok, ich duck' mich schon mal wegen der Steine, die junix nach mir schmeißt.
@johony:
Nur als Denkanstoß: wäre es nicht sinnvoller, jedem "huhn"-Objekt ein eigenes TImage zu geben? Und was du mit ManualDock willst, ist mir schleierhaft. Und: lern' endlich mal die deutsche Rechtschreibung. Mir kommt immer so ein leichter Übelkeitsanfall, wenn ich deine Posts lese...
-
Dasd schrieb:
Ok, ich duck' mich schon mal wegen der Steine, die junix nach mir schmeißt.
Hab ich Grund dazu? (o:
-junix
-
ok also des mit der Deutschen sprache ist kein Problem (wenn ich will).
-das mit ManualDoc hat vorhin einer aus meiner Paralell-klasse gemacht, er hat gemeint des ich das auf jeden fall brauche.Dasd schrieb:
Nur als Denkanstoß: wäre es nicht sinnvoller, jedem "huhn"-Objekt ein eigenes TImage zu geben?
-und wie du des gemeint hast weiß ich nich.
?? hast du gemeint dass ich gar keinen array/verktor (was auch immer) für das TImge verwenden soll??mfg johony
-
johony schrieb:
das mit ManualDoc hat vorhin einer aus meiner Paralell-klasse gemacht, er hat gemeint des ich das auf jeden fall brauche.
Ahja, und wenn er sagt "Spring aus dem Fenster", dann springst du aus dem Fenster.
Was willst du denn damit bezwecken?
Und wegen des Arrays. Um es auf den Punkt zu bringen: Ich würde ein Array aus huhn-Objekten erstellen, in denen jedes sein eigenes TImage hat.@junix: War nur präventiv.
-
Dasd schrieb:
Und wegen des Arrays. Um es auf den Punkt zu bringen: Ich würde ein Array aus huhn-Objekten erstellen, in denen jedes sein eigenes TImage hat.
des hatte ich ja schon vor.
aber wie meinst du soll ich die TImage´s erzeugen, ohne dass die dann alle den gleichen namen haben.(kann ich auch ein TImage im timer erzeugen und dann beim erzeugen einen Objekts das TImage als übergabeparameter im construktor der kl huhn übergebenthx johony
-
Selbstverständlich haben sie dann alle den gleichen Namen (was denn sonst?). Aber sie gehören nicht alle zur selben Instanz deiner Klasse, womit das so ziemlich egal ist...
johony schrieb:
kann ich auch ein TImage im timer erzeugen und dann beim erzeugen einen Objekts das TImage als übergabeparameter im construktor der kl huhn übergeben
Kannst du, wenn alle dasselbe Bild haben sollen. Dann allerdings nicht im Timer sondern nur einmal zu beginn. Warum willst du die denn immer wieder neu erzeugen?