TForm Constructor erweitern
-
Hallo,
ich möchte den Constructor eines TForm Objekts mit dem folgenden Code um einen Übergabeparameter erweitern:
Header File:private: // Anwender-Deklarationen int x; public: // Anwender-Deklarationen __fastcall TfSetPort(TComponent* Owner, int num);
CPP File:
__fastcall TfSetPort::TfSetPort(TComponent* Owner, int num) : TForm(Owner), x(num) // Aufruf des vererbten constructors sowie // Parameter initialisierung { cbBit0->Caption = IntToStr(x); // nur ein Test }
Aufruf des Formulars:
void __fastcall TfConfig::dbBcsctl1Click(TObject *Sender) { TfSetPort *SetPort1 = new TfSetPort(this, 5); SetPort1->Show(); delete SetPort1; }
Wenn ich allerdings das Formular so Aufrufe bekomme ich einen Stack Überlauf.
Ansonsten ist dies mein 2.Constructor. Denn Originalen habe ich stehen lassen.
Hat das vielleicht etwas mit der VCL zu tun, oder mit TForm?Thomsa
-
Den Konstruktor hast du richtig erweitert, das sollte so funktionieren. Was machst du den mit: , x(num)?
-
Original erstellt von OrreWombell:
Den Konstruktor hast du richtig erweitert, das sollte so funktionieren. Was machst du den mit: , x(num)?Wie wäre es mit
__fastcall TfSetPort::TfSetPort(TComponent* Owner, int num) : TForm(Owner) // Aufruf des vererbten Konstruktors das mit der Parameterinitialisierung ist Quatsch! { x = num; // Deshalb übergibst du den Parameter schliesslich cbBit0->Caption = IntToStr(x); // nur ein Test }
-
Hallo,
,x(num) gehört zur Parameterinitialisierung bei Klassen. Damit mache ich die zuweisung x = num. Allerdings habe ich trotzdem einen Stack Überlauf.
Thomas
-
Was bitte ist cbBit0 ?
-
So kann man Paramter einer Klasse initialisieren? Dann ist mein Posting natürlich Unsinn.
-
Mit ":TForm(Owner)" wird auch der Konstruktor vom Vorfahren aufgerufen, ein muss beim Ableiten einer neuen Klasse.
Mit meiner Parameterübergabe habe ich das Problem auch gelöst. Es muss eine Referenz oder ein Zeiger sein!Thomas
-
Hi,
TForm hat bereits mehere Konstruktoren:
__fastcall virtual TForm(Classes::TComponent* AOwner) : Forms::TCustomForm(AOwner) { } __fastcall TForm(Classes::TComponent* AOwner, int Dummy) : Forms::TCustomForm(AOwner, Dummy) { } __fastcall TForm(HWND ParentWindow) : TCustomForm(ParentWindow) { }
ein Wunder, dass der Compiler nicht zumindest eine Warnung rausschmeisst.
Bist du sicher, dass nicht doch ein anderer Konstruktor verwendet wird als deiner ? Ansonsten debug mal das Formular und stelle fest, woh der Fehler enteht.[ Dieser Beitrag wurde am 09.03.2003 um 19:32 Uhr von AndreasW editiert. ]
-
Hi Leute!
Das Problem hatten ich auch schon mal vor ein paar Tagen gepostet. Man kann es umgehen indem man die Übergabeparameter vor das (TComponent *Owner) schreibt. Also so:
private: // Anwender-Deklarationen int x; public: // Anwender-Deklarationen __fastcall TfSetPort(int num, TComponent* Owner); __fastcall TfSetPort::TfSetPort(int num, TComponent* Owner) : TForm(Owner) // Aufruf des vererbten constructors sowie // Parameter initialisierung { int Zahl = num; // Test cbBit0->Caption = IntToStr(x); // nur ein Test } void __fastcall TfConfig::dbBcsctl1Click(TObject *Sender) { TfSetPort *SetPort1 = new TfSetPort(5, this); SetPort1->ShowModal(); if (SetPort1) { delete SetPort1; SetPort1 = NULL; } }