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 :

Erreur de compilation "Duplicate Identifier"


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 592
    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 592
    Billets dans le blog
    65
    Par défaut Erreur de compilation "Duplicate Identifier"
    Bonjour,

    je me suis remis un tout petit peu à Lazarus (installation basique de la version 2.0.10) et je "tombe" sur une erreur de compilation intrigante, peut-être parce que je suis habitué à Delphi

    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TDatas = class(TDataModule)
        // ..
      private
        // .. 
      public
        idUser, Groupe : Integer;
        nom : String;
        function ChangerUtilisateur(const Trigramme,Nom,Prenom,mdp : String ; const Groupe : Integer) : Boolean;
        // ..
      end;
    J'ai deux erreurs pour nom et groupe bien sûr il me suffit de renommer (ou autre choix) mais je trouve ça étrange qu'une variable au sein d'une procédure soit confondue avec une variable publique. Une explication ? Règle particulière a FreePascal ? Directive de compilation manquante ?

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour Sergio,

    l'erreur est générée dans ta déclaration de fonction n'est ce pas ?. C'est tout simplement que tu utilises "Nom" et "Groupe" comme variables dans la fonction. FPC n'est pas sensible à la casse dans le cas présent. Du coup, FPC, dans ta fonction, ne sait pas si il faut utiliser les variables publique ou celles de la fonction d'ou le "Duplicate Identifier".

    Renommes simplement les paramètres de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ChangerUtilisateur(const Trigramme,UnNom, UnPrenom, UnMdp : String ; const UnGroupe : Integer) : Boolean;

    FPC par contre sensible à la casse dans la clause uses sous MacOS et Linux. Par exemple tu as une unité nommée "TartanPion" si tu la déclare dans le code comme ceci

    Sous Windows pas de problème, mais sous Linux ou MacOS FPC ne trouvera pas l'unité car ces deux systèmes sont sensibles à la casse

    Pour plus de compatibilité avec "Delphi", au lieu d'utiliser la Macro {$mode objfpc} tu peux utiliser {$mode delphi} Il y a quelques différences, par exemple pour l'assignation via un pointer :

    Mode ObjFPC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaForm.OnMouseMove := @DoMouseMove;
    Mode Delphi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaForm.OnMouseMove := DoMouseMove;
    Il y a quelques petites nuances de ce genre entre les deux modes, mais rien de bien méchant.
    Pour ma part je préfère utilisé {$Mode ObjFPC} Et si je doit rendre compatible mon code avec "Delphi RAD" je rajoute des macros du genre {$IFNDEF FPC}..{$ENDIF}.
    Et je conseil d'éviter de mélanger les 2 modes dans les unités, même si ils cohabitent plutôt bien . Car cela peut-être une prise de tête pour trouver un bug "Faux positif" si tu ne penses pas à ces petites différences

    Quelques explications (en anglais) sur les différents modes de compilation et sur le portage de code "Delphi"

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Une autre petite chose si tu veux faire que L'EDI Lazarus ressemble plus à celle de Delphi tu peux te référer à mon tutoriel Configurer et personnaliser l'EDI Lazarus

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 163
    Billets dans le blog
    9
    Par défaut
    Hello! Une remarque complètement hors-sujet. Data, c'est déjà du pluriel. Pas besoin de "s"...

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 592
    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 592
    Billets dans le blog
    65
    Par défaut
    @BeanzMaster Comme je l'ai indiqué "bien sûr je peux renommer", j'ai d'ailleurs préféré une voie différente en mettant les variables publiques dans un record. La non-sensibilité à la casse je l'avais bien notée.

    {$mode delphi} est ce que je cherchais en fait {$mode delphiunicode} correspondrait encore mieux à mes habitudes


    @Roland oui, tu as raison ce ne sont pas des rendez-vous, bof, mettons ça sur le compte du franglais ou du enench

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

Discussions similaires

  1. Erreur à la compilation:Duplicate local variable
    Par manguigs dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 17/03/2009, 12h05
  2. Réponses: 9
    Dernier message: 06/11/2008, 20h58
  3. [D2006] Erreur de Compilation duplicate ressource
    Par SergioMaster dans le forum Delphi
    Réponses: 5
    Dernier message: 30/06/2007, 10h11
  4. Réponses: 12
    Dernier message: 26/08/2005, 10h02

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