Reprendre un sujet de 2006 ! Ce n'est pas bien !
TFormContexte l_ptTFormContexte = new TFormContexte(NULL, 1);
Toute petite erreur, il manque l'étoile, en C++, new implique un pointeur, cherche autour de "instanciation ou allocation statique" et "instanciation ou allocation dynamique"
la Touche F1 si l'on sélectionne une erreur dans la liste fonctionne et propose un descriptif de l'erreur, google avec "E2459" comme mot clé te permet aussi de trouver la Documentation Wiki Embarcadero : Les classes de style Delphi doivent être construites en utilisant l'opérateur new (C++)
TFormContexte * l_ptTFormContexte = new TFormContexte(NULL, 1);
Pour NULL, il va peut-être rallé car void* n'est pas compatible avec TComponent* ...
1 2
| TFormContexte * l_ptTFormContexte = new TFormContexte((TComponent*)NULL, 1);
l_ptTFormContexte->ShowModal(); // -> c'est comme (*obj). déréférencement et accès au membre |
otacon ghost ! Attention !
Tu tombes sur un cas plus subtile que celui de Pfeffer !
J'ai évoqué cela dans Méthodes Virtuelles appelés depuis un Constructeur - 11
__fastcall TForm(TComponent* Owner, int);
existe déjà !
/* TCustomForm.CreateNew */ inline __fastcall virtual TForm(Classes::TComponent* AOwner, int Dummy) : TCustomForm(AOwner, Dummy) { }
Tu vas donc surcharger le constructeur surnommé "CreateNew" !
1 2 3
| __fastcall TFormContexte::TFormContexte(TComponent* Owner, int p_iValeur)
: TForm(Owner)
{ |
Dans cette surcharge de CreateNew tu appele le constructeur simple "Create"
mais Create appel CreateNew avec la spécificité de la VMT des objets Delphi, c'est bien ton CreateNew qui sera de nouveau appelé, alors même en apportant les corrections syntaxiques élémentaires, tu auras une erreur "débordement de pile" à cause d'une recursivité sans fin !
ta déclaration devra être de la forme suivant
HIDESBASE __fastcall TFormContexte(TComponent* AOwner, int p_iValeur);
HIDESBASE va "retirer" le virtual et donc l'override implicite, cela conservera intact le CreateNew de TForm !
Partager