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

Langage Delphi Discussion :

[D6] Utilisation du constructeur


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut [D6] Utilisation du constructeur
    Bonjour à tous

    Je suis déporté: le programme compile et il plante

    J'obtiens le message d'erreur suivant :
    Le projet Project1.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 00...

    J'ai tout effacé ou presque, je n'ai plus de code et je trouve toujours pas d'où vient cette satanée erreur...

    Voici le code du composant
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    unit ra03;
     
    interface
    uses math, mathematica, contnrs, sysutils, classes;
     
    type TRL_0a2=class
        private
            vMemoire:integer;
            aPrix:array of double;
        protected
        public
            constructor create(Prix:String);
     
        end;
     
    implementation
     
    constructor TRL_0a2.create(Prix:String);
    var l:tstringlist;
         i:integer;
     
    begin
        decimalseparator:='.';
     
        vMemoire:=0;
        l:=tstringlist.create;
        l.text:=Prix;
     
    //transfere dans le tableau
        setlength(aPrix,l.count);
        for i:=0 to l.count-1 do begin
            aPrix[i]:=strtofloat(l[i]);;
        end;
     
        l.free;
     
    end;
     
    end.
    L'unité principal :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ra03;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
     
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    begin
     
           RSP.create('11.50'+#13+'12.40'+#13+'13.30'+#13+'14.20'+#13+'15.10'+#13+'16.00'+#13+
                       '17.14'+#13+'18.29'+#13+'19.30'+#13+'20.40'+#13+'21.50'+#13+'22.60'+#13+
                       '23.75'+#13+'24.83'+#13+'25.93'+#13+'26.10'+#13+'27.14'+#13+'28.20');
     
           RSP.Free;
     
    end;
     
    end.
    Merci d'avance pour vos lumières, car ici c'est les ténèbres...

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RSP := TRL_0a2.create('11.50'+#13+'12.40'+#13+'13.30'+#13+'14.20'+#13+'15.10'+#13+'16.00'+#13+
                          '17.14'+#13+'18.29'+#13+'19.30'+#13+'20.40'+#13+'21.50'+#13+'22.60'+#13+
                          '23.75'+#13+'24.83'+#13+'25.93'+#13+'26.10'+#13+'27.14'+#13+'28.20');

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je suis déporté
    expression québécoise je présume

    je cherchais vainement le "composant" et sa déclaration Andnotor est allé plus vite que moi
    je rajouterais en plus de sa remarque que je n'ai pas vu de déclaration de RSP dans l'unité principale (faute certainement à une simplification excessive du source fautif)

    pour vos lumières, car ici c'est les ténèbres...
    t'inquiètes, c'est le décalage horaire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 227
    Points : 1 095
    Points
    1 095
    Par défaut
    Tu oublié aussi de déshérité ton Create. Vu que tu fait ton propre constructeur Create tu peux avoir un conflit avec l'original. De plus le fait de déshérité te permet de faire hérité les caractéristiques du Create Original vers ton Custom Create.

    Inherited Create(Owner);
    Edit: Je dis de grosses bêtises.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Qu'est-ce que c'est que ce charabia de "déshériter" ?
    EDIT : MERCI de ton EDIT

    l'appel du constructor Create de l'ancêtre n'est pas obligatoire si l'on hérite directement du TObject
    Mais il est vrai que c'est une bonne pratique de faire l'appel systématique au constructeur de l'ancêtre.

    Et c'est un appel SANS paramètre pour le Create du TObject !
    C'est un constructeur simple, une méthode statique

    Tu as confondu avec le Create du TComponent qui fait apparaitre le Owner dont hérite la TForm.
    Ce constructeur de TComponent est de plus virtuel et cache que le constructeur de l'ancêtre, c'est ce qui impose la rédéfinition par override
    on peut éventuellement "masquer" le constructeur du TComponent avec un constructeur statique ou virtuel avec une autre liste de paramètre ce qui génère un avertissement que la directive reintroduce permet de ne plus afficher

    En aucun cas l'erreur provenait de cela mais de l'appel du Create à partir d'une référence au lieu de le faire à partir de la classe
    Mauvais : RSP.create('...');
    Bon : RSP := TRL_0a2.Create('...');



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    constructor TRL_0a2.create(Prix:String);
    var l:tstringlist;
         i:integer;
    begin
      inherited Create(); // Sans paramètre
     
      ...
     
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Points : 310
    Points
    310
    Par défaut
    Merci à tous.


    J'ai déjà lancé un fil de discussion sur le sujet


    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    expression québécoise je présume
    Je ne croyais pas... mais en cherchant sur internet je n'ai rien trouvé. À prendre dans le sens d'une perte de repère. Je reviens là-dessus si je trouve plus d'informations sur l'expression...


    je cherchais vainement le "composant" et sa déclaration Andnotor est allé plus vite que moi
    je rajouterais en plus de sa remarque que je n'ai pas vu de déclaration de RSP dans l'unité principale (faute certainement à une simplification excessive du source fautif)


    t'inquiètes, c'est le décalage horaire
    Je crois que c'est plus que ça

    Merci encore à tous!!!

  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
    RSP.Create n'est pas interdit mais il faut que l'objet soit déjà instancié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RSP := TRL_0a2.Create('1'#13'2'#13'3');
     
    RSP.Create('4'#13'5'#13'6');  // Est valide ici

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

Discussions similaires

  1. je ne trouve pas l'erreur dans mon programme
    Par Briska dans le forum Débuter
    Réponses: 19
    Dernier message: 04/04/2008, 09h21
  2. Réponses: 6
    Dernier message: 14/12/2006, 00h37
  3. Réponses: 4
    Dernier message: 10/08/2006, 13h44
  4. [Sécurité] boucle infinie je trouve pas l'erreur
    Par scorpking dans le forum Langage
    Réponses: 14
    Dernier message: 26/07/2006, 15h04
  5. je ne trouve pas l'erreur ?
    Par nourdine dans le forum Langage
    Réponses: 7
    Dernier message: 04/01/2006, 23h51

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