2. VCL-Konstruktor erstellen?
-
Hi,
also ich habe folgende Klasse:
class PACKAGE TMyKlasse : public TOrgKlasse { private: protected: public: int iId; __fastcall TMyKlasse(TComponent* Owner); __fastcall TMyKlasse(TComponent* Owner, int ID); __fastcall ~TMyKlasse(); };mit
__fastcall TMyKlasse::TMyKlasse(TComponent* Owner) : TOrgKlasse(Owner) { //massig befehle } __fastcall TMyKlasse::TMyKlasse(TComponent* Owner, int ID) { TMyKlasse(Owner); iId = ID; };Das funktioniert aber so nicht, da BCB keinen Standardkonstruktor findet!
Muss ich den Standardkonstruktor irgendwie kennzeichnen oder ist die Vorgehensweise völlig falsch? Jedenfalls brauch ich wirklich 2 Konstruktoren, da verschiedene Parentklassen unterschiedlich initialisieren.Mfg
Surillium
-
Du hast mehrere Fehler in deinem Code:
1. Der 2. Konstruktor ruft nicht die Basisklasse "TOrgKlasse" auf
2. Der Aufruf "TMyKlasse(Owner);" erzeugt einfach nur ein temporäres Objekt
(bei C++ kann man nicht von einem Konstruktor einen anderen aufrufen)Es gibt zwei Möglichkeiten, dies zu lösen:
1. eine allgemeine Init-Methode, die von beiden Kosntruktoren aufgerufen wird
__fastcall TMyKlasse::TMyKlasse(TComponent* Owner) : TOrgKlasse(Owner) { Init(); } __fastcall TMyKlasse::TMyKlasse(TComponent* Owner, int ID) : TOrgKlasse(Owner) { iId = ID; Init(); }; void TMyKlasse::Init() // evtl. sogar mit Parametern { // ... }oder
2. nur einen Konstruktor definieren, der aber einen Defaultwert enthält, z.B.
__fastcall TMyKlasse(TComponent* Owner, int ID = 0);
-
Hallo,
Du mußt den Konstruktor der Basisklasse in der Initialisierungsliste aufrufen. Du kannst einen Konstruktor nicht direkt aufrufen.
__fastcall TMyKlasse::TMyKlasse(TComponent* Owner) : TOrgKlasse(Owner) { //massig befehle } __fastcall TMyKlasse::TMyKlasse(TComponent* Owner, int ID) : TOrgKlasse(Owner) { iId = ID; };[edit]Zu spät.[edit]
-
Danke!

Die Variante mit dem Defaultwert passte für mein Fall perfekt!