IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Comment corriger : An inherited method is hidden by "destructor xyz;" ? [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment corriger : An inherited method is hidden by "destructor xyz;" ?
    Bonjour,

    Savez-vous comment remédier à ce message :

    Warning: An inherited method is hidden by "destructor TAcars.Destroy;"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public
        destructor Destroy;
     
    [...]
     
    destructor TAcars.Destroy;
    begin
        inherited Destroy;
        acarsd_destroy(fLib);
    end;
    Merci,
    ZiP

  2. #2
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    J'ai ajouté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    destructor Destroy; override;
    Je n'ai plus l'erreur, ma modification est-elle correcte ?

    Merci,
    ZiP

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Oui, puisque tu surcharges le destructeur de l'ancêtre (cad modifie son comportement) tout en laissant "visible" le TAncetre(TDescendant).Destroy
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Merci pour votre précision.

    ZiP

  5. #5
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 195
    Points
    195
    Par défaut
    C'est tout ce qu'il faut faire ? OMG j'en ai du code à revoir pour tous les faire sauter....

    merci pour la question et la réponse

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 129
    Points
    15 129
    Par défaut
    Bonjour,

    n'y aurait-il pas une autre erreur, là ? :
    Citation Envoyé par [ZiP] Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    destructor TAcars.Destroy;
    begin
        inherited Destroy;
        acarsd_destroy(fLib);
    end;
    Normalement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TTest.Destroy;
      begin
        ...
        Inherited;  // Toujours à la fin des destructeurs et démarre le destructeur (code seulement) de la classe parent
      end;
    Source
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Citation Envoyé par Jipété Voir le message
    n'y aurait-il pas une autre erreur, là ?
    Avant ou après inherited dans Create ou Destroy n'est pas absolu. L'objet existe déjà à l'appel de Create et encore jusqu'à la sortie de la méthode Destroy.
    Create et Destroy ne servent qu'à allouer (et initialiser), respectivement libérer les variables propres à chaque classe de l'héritage (un peu réducteur, plein d'autres choses peuvent y être faites).

    Regarde TObject.Create, il est vide

    Les règles sont ainsi :
    • si tu dois accéder à la création aux variables ancêtres, c'est obligatoirement après inherited ;
    • si tu dois accéder à la destruction aux variables ancêtres, c'est obligatoirement avant inherited ;
    • sinon, c'est ton choix (même si par convention, on fera plutôt comme ci-dessus).


    J'ai eu un cas dernièrement sur la synchronisation d'un thread par event (mais il pourrait se présenter avec d'autres objets).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    constructor TDelayThread.Create(...);
    begin
      inherited Create;
      StartEvent := TEvent.Create(...);
    end;
     
    destructor TDelayThread.Destroy;
    begin
      inherited;
      StartEvent.Free;
    end;
     
    procedure TDelayThread.TerminatedSet;
    begin
      inherited;
      StartEvent.SetEvent;
    end;
     
    procedure TDelayThread.Execute;
    begin
      while not Terminated do
      begin
        StartEvent.WaitFor(INFINITE);
      end;
    Le thread est en attente de l'event. Pour pouvoir le terminer, il faut commencer par le démarrer, donc activer/signaler l'event.
    La demande de fin du thread peut être faite par Terminate (qui appelle à son tour TerminatedSet) ou par Free.

    Dans le cas de Free, puisque TThread.Destroy appelle aussi Terminate. Si on détruit l'event avant inherited, c'est une VA dans TerminatedSet.
    Obligé ici de détruite l'event après inherited.

    Ton lien wiki n'est pas 100% pertinent

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 129
    Points
    15 129
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ton lien wiki n'est pas 100% pertinent
    Ben oui, mais alors, si même la Bible n'est pas fiable...
    Parce que c'est quand même le wiki de FreePascal, quoi,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    C'est plus juste en allemand :
    Steht meistens am Ende ...
    Se situe généralement à la fin ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C++ 1.1] Comment avoir accès aux méthodes d'une dll ?
    Par jacklsurf dans le forum Framework .NET
    Réponses: 6
    Dernier message: 15/04/2006, 22h49
  2. [MFC] Comment corriger ces fuites de mémoire
    Par Philippe320 dans le forum MFC
    Réponses: 8
    Dernier message: 07/03/2006, 13h50
  3. [FTP] comment corriger une boucle infinie ?
    Par sofybj dans le forum Langage
    Réponses: 8
    Dernier message: 08/11/2005, 14h49
  4. Comment corriger le bug de RightClickSelect du treeview de Delphi 7 ?
    Par bambino3996 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/08/2005, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo