Form Constructor überladen? (war: Form Constructor)
-
Hi,
ich erstelle zwei Constructors zum Aufruf einer Form:
.h File
__fastcall TfmStageX(TComponent* Owner);
__fastcall TfmStageX(TComponent* Owner, int iStageX);.cpp File
Hier gibts beim Aufruf kein Problem
__fastcall TfmStageX::TfmStageX(TComponent* Owner)
: TForm(Owner)
{
iStage = 7;
}Hier crashed der Aufruf mit: Stack overflow in forms.h
__fastcall TfmStageX::TfmStageX(TComponent* Owner, int iStageX)
: TForm(Owner)
{
iStage = iStageX;
}Was mache ich falsch?
Danke für eine Aufklärung!
Dieter
Edit:
Bitte aussagekräftige Überschriften wählen. Danke!
-
Das Problem ist daß TForm bereits einen Ctor mit
den zwei Parameter definiert.Die Lösung ist ganz einfach :
Definiere deinen Ctor statt mit zwei Parameter noch mit einem dritten Parameter.im Header __fastcall TfmStageX(TComponent* Owner, int iStageX,int Dummy); in Cpp __fastcall TfmStageX::TfmStageX(TComponent* Owner, int iStageX,int Dummy) : TForm(Owner),iStage(iStageX) { // Dummy bleibt tod }
-
Nein, besser ist es, alle neuen Parameter vor TComponent* Owner zu schreiben. Also so:
__fastcall TfmStageX(int iStageX, TComponent* Owner); __fastcall TfmStageX::TfmStageX(int iStageX, TComponent* Owner) : TForm(Owner) { iStage = iStageX; }
-
Kann man den Konstruktor nicht überschreiben? Also so:
__fastcall TfmStageX::TfmStageX(TComponent* Owner, int iStageX) : TForm(Owner, iStageX) { iStage = iStageX; }
Ah ne, is doch scheiße, denn dann hat man Probleme mit der DFM-Datei. Siehe BCB-Hilfe. Ich finde übrigens die Lösung von case "besser" als die von F98. Das ist aber sicherlich eine subjektive Frage. Is doch völlig Wurst, wie man's nun macht.
-
Vielen Dank! Ihr hab mir sehr geholfen. Ich werde alle Lösungen einmal ausprobieren.
-
Ich finde übrigens die Lösung von case "besser" als die von F98.
Hö!
Meine funktioniert einwandfrei und ist einfacher -> besser! :p
-
Deine ist aber nicht der Norm entsprechend. Deshalb finde ich die andere besser.