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 :

[BDS2006Win32] Comparaison de structure record


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut [BDS2006Win32] Comparaison de structure record
    Bonjour à tous.
    Ce code est incompilable à cause d'une erreur:E2015 Operator not applicable to this operande type. Pourquoi ?
    Voila le code:
    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
    type
      Ttest=record
      text:String;
      end;
     
     
    var
      Form1: TForm1;
      test,test2:Ttest;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    test.text:='essai';
    test2:=test;
    if test=test2 then // l'erreur est ici :'(
    beep;
    end;
    Voila quelque chose doit m'echapper (certainment un truc évident comme tjs ). J'étais pourtant sur qu'on pouvait comparer une égalité de structure record...

    Merci d'avance

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edrin17
    J'étais pourtant sur qu'on pouvait comparer une égalité de structure record...
    Dans la syntaxe que tu proposes on ne sait pas si on doit tester l'adresse des 2 records ou leurs contenus.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qio,
    Citation Envoyé par edrin17
    J'étais pourtant sur qu'on pouvait comparer une égalité de structure record...
    eh non !

    D'où peut te venir cette certitude ?
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Tu dois en effet comparer champ par champ du record.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Salut !
    Dans la syntaxe que tu proposes on ne sait pas si on doit tester l'adresse des 2 records ou leurs contenus.
    Je voulais comparer le contenu des structures record.

    Juste pour info cette certitude (qui n'en est donc plus une) me viens du livre: 'Borland Delphi 6' de Thomas Binzinger page 211. Il écrit que les 2 seules opérations possibles avec une structure record sont := et = . Bref c'est avec ce livre j'ai appris le peu de Delphi que je connais et la trop dur...la fin d'un mythe (ce livre est un Bible pour moi). Peut être que cette affirmation était vrai sous Delphi 6 et pas sous BDS2006 ?

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edrin17 Voir le message
    pas sous BDS2006 ?
    Sous BDS2006 tu peux utiliser en .NET et Win32 la surcharge d'opérateur
    http://laurent-dardenne.developpez.c...veautes/#L12-3

    Un exemple rapide:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    program Project1;
    {$APPTYPE CONSOLE}
    uses
    SysUtils;
     
    type
    PTMonRecord=^TMonRecord;
    TMonRecord = record
     Champ1: Byte;
     class operator Equal(a: TMonRecord; b: TMonRecord): Boolean;
    end;
     
    { TMonRecord }
    class operator TMonRecord.Equal(a, b: TMonRecord): Boolean;
    begin
     Result:=A.Champ1=b.Champ1;
    end;
     
    Function EstCeLeMeme(const a, b: PTMonRecord ): Boolean;
    begin
     Result:= a=b;
     if Result
      then Writeln('Record ayant la meme adresse')
      else Writeln('Record n''ayant pas la meme adresse');
    end;
     
    procedure Test(var a, b: TMonRecord);
    begin
     if a=b
      then Writeln('Contenu des records egaux')
      else Writeln('Contenu des records inegaux');
     EstCeLeMeme(@a,@b); 
     Writeln;
    end;
     
    var RecA, RecB : TMonRecord;
     
    begin
     RecA.Champ1:=10;
     RecB.Champ1:=11;
     Test(RecA,RecB);
     
     RecB.Champ1:=RecA.Champ1;
     Test(RecA,RecB);
     
     RecB:=RecA;
     Test(RecA,RecB);
     
     Test(RecA,RecA);
     readln;
    end.
    Affiche :
    Contenu des records inegaux
    Record n'ayant pas la meme adresse

    Contenu des records egaux
    Record n'ayant pas la meme adresse

    Contenu des records egaux
    Record n'ayant pas la meme adresse

    Contenu des records egaux
    Record ayant la meme adresse

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Une petite remarque concernant le code proposé il faut déterminer si l'égalité (Operateur Equal) se fait sur l'adresse ou sur le contenu.

    D'aprés cette régle, .NET, la solution proposé est erronée.
    Il reste donc une ambiguïté pour Win32 il me semble...

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

Discussions similaires

  1. Comparaison de structures avec tableau ?
    Par Nikolas dans le forum C++
    Réponses: 26
    Dernier message: 01/11/2010, 17h06
  2. comparaison de structures
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/06/2008, 13h51
  3. Comparaison sur structure
    Par HaTnuX dans le forum C
    Réponses: 4
    Dernier message: 05/12/2006, 13h48
  4. Comparaison de structure de deux tables
    Par Ryan Sheckler dans le forum Outils
    Réponses: 7
    Dernier message: 15/02/2006, 22h00
  5. [ structure ] record et evolution
    Par petitcoucou31 dans le forum Langage
    Réponses: 15
    Dernier message: 29/10/2005, 01h36

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