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

Delphi Discussion :

Problème de compilation


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Par défaut Problème de compilation
    Bonjour,
    J'ai un problème avec le compilateur de D6:

    Soit une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    TMaClass = class
    private
      FTruc: integer;
    public
      contructor Create;
    end;
     
    Constructor TMaClass.Create;
    begin
      inherited;
      FTruc := 10;
    end;
    et soit une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function CreateObj(LaClass: TClass):TObject;
    begin
       Result := LaClass.Create;
    end;
    bien sur tout ceci est un exemple, dans mon projet j'ai plusieurs classes...
    enfin bref, le compilateur ne me compile pas le TMaClass.create() sous pretexe qu'il est (selon lui) jamais appelé... Comment puis-je le forcer à compiler correctement mon code ? à part mettre un bout de code pour le forcer du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ObjetQuiSertPas := TMaClass.Create();
    ObjetQuiSertPas.Free;

  2. #2
    Membre chevronné
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Par défaut
    Citation Envoyé par Bruno@Chrysis
    Bonjour,
    J'ai un problème avec le compilateur de D6:

    Soit une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    TMaClass = class
    private
      FTruc: integer;
    public
      contructor Create;
    end;
     
    Constructor TMaClass.Create;
    begin
      inherited;
      FTruc := 10;
    end;
    et soit une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function CreateObj(LaClass: TMAClass):TObject;
    begin
       Result := LaClass.Create;
    end;
    bien sur tout ceci est un exemple, dans mon projet j'ai plusieurs classes...
    enfin bref, le compilateur ne me compile pas le TMaClass.create() sous pretexe qu'il est (selon lui) jamais appelé... Comment puis-je le forcer à compiler correctement mon code ? à part mettre un bout de code pour le forcer du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ObjetQuiSertPas := TMaClass.Create();
    ObjetQuiSertPas.Free;
    Bonjour,
    Les ajouts en rouge devraient clouer le bec de votre compilateur, non?
    Cordialement,
    Hauwke

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 69
    Par défaut
    J'ai du mal m'exprimer, en fait c'est bien TClass que je passe car la classe peut varier... pour un exemple complet, regarder le code de graphic.pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TPicture.ForceType(GraphicType: TGraphicClass);
    begin
      if not (Graphic is GraphicType) then
      begin
        FGraphic.Free;
        FGraphic := nil;
        FGraphic := GraphicType.Create;
        FGraphic.OnChange := Changed;
        FGraphic.OnProgress := Progress;
        Changed(Self);
      end;
    end;
    en gros c'est cela que je veux faire...
    En fait j'ai résolu mon problème en creant un contructeur virtuel pour ma classe de base et en surchageant ce contructeur et là tout marche bien
    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
     
    TClassDeBase = Class
    public
      contructor Create; virtual;
    end;
     
    TClassBase = class of TClassDeBase;
    TMaClass = class(TClassDeBase )
    public
      contructor Create; override;
    end;
     
    function CreateObj(LaClass: TClassDeBase):TObject;
    begin
       Result := LaClass.Create; // maintenant mon contructeur est bien appelé.
    end;

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

Discussions similaires

  1. [Installation] Borland Compiler 5.5 sous XP
    Par Ligey dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 28/09/2002, 22h45
  2. dans le fond, la compilation...
    Par deltapositive dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/09/2002, 12h14
  3. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  4. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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