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 éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    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 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    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

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

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 231
    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
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    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 éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    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 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    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