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. 😉


Anmelden zum Antworten