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

Free Pascal Discussion :

[Free Pascal] Erreur de compilation hallucinante


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut [Free Pascal] Erreur de compilation hallucinante
    Bonjour , je me remets au pascal (que j'avais étudié en classe l'an passé) et j'ai un petit souci.

    Voici comment je procède

    j'ai un programme principal logique.pas
    j'ai deux unités : debug.pas et portes.pas

    J'ai des types et constantes globales :

    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
    //Déclaration des constantes
    const max = 10;
     
    //Déclaration des types
    type tab_int = array [1..max] of integer ;
    type tab_string = array [1..max] of string ;
     
    //type porte
    type door = record
         id : integer;
         entree1 : char;
         entree2 : char;
         entree3 : char;
         sortie : char;
         etage : integer;
         colonne : integer;
         nb_entrees : integer;
         operateur : integer
    end;
     
    type tab_portes = Array [0..max] of door;
    Dois je les déclarer dans chaque unité? (je le fais actuellement)

    Ensuite j'ai des procédure dans ces unités dont

    procedure ajout_porte(var les_portes : tab_portes ; var porte_numero,etage,colonne : integer ; var portes_sur_etage:tab_int);

    que j'appele dans le prog principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    repeat
          //ajout_porte(porte_numero,etage,colonne,portes_sur_etage,entrees,infos,operateurs,sorties);
           ajout_porte(les_portes,porte_numero,etage,colonne,portes_sur_etage);
    until...
    j'ai bien défini ma variable les_portes (qui est globale) dans mon prg principal
    //Déclaration des variables globales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var les_portes : tab_portes;
    et pourtant à la compilation
    j'ai une erreur

    73 / 20 logique.pas
    Error: Incompatible type for arg no. 1: Got TAB_PORTES, expected TAB_PORTES

    Ce sont les memes types!!!


    Qu'est ce qui ne vas pas?

  2. #2
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Ce qui ne va pas, c'est la déclaration multiple ! Imagine : tu changes le type d'un champ de ta structure, ça t'obligerait à le modifier n fois...

    Une seule et unique déclaration des types. Es-tu obligé de redéclarer le type Integer dans chacun de tes programmes ? Non, car il est défini dans l'unité System (incluse par défaut dans tous les programmes/unités).

    @++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut
    c'est bien ce que je me disais mais j'ai un problème

    Sur ma capture d'écran , vous pouvez voir mon espace de travail.

    logique.pas est le programme principal
    portes.pas et debug.pas sont des unités.

    J'ai enlevé toutes les redéclarations de types et constantes des unités.
    La déclaration est donc faite uniquement dans mon prog principal logique.pas

    J'ai bien défini les types dans le bon ordre et pourtant à la compilation , il rale sur un type tab_portes inconnu dans portes.pas




    Qu'est ce qui ne vas pas? merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Je pense que tu devrais réviser l'utilisation des units.

    Il y a une partie

    interface

    où tu déclares tout ce que ton unité va exporter, c'est à dire rendre accessible à d'autres unités


    et une partie
    implementation

    comme son nom l'indique.

    Donc, si j'ai bien suivi, ta procedure
    se trouve dans une unité logique

    tu devrais donc avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unit logique;
    uses ...ce qu'il faut
    interface
      ce que tu veux exporter, donc les types, fonctions....
    implementation
      tour ce qui est nécessaire
    end.
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    unit portes;
    uses ...ce qu'il faut , logique;
    { et à partir d'ici, ce que tu as déclaré dans la partie interface de logique
    est accessibles}
    interface
      idem
    implementation
      idem
    end.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut
    j'ai donc fait

    portes.pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    unit portes;
    INTERFACE
    
    uses logique,wincrt;
    
    //entete des procedures et fonctions
    function est_lettre(c :char) : boolean;
    procedure ajout_porte(var les_portes : tab_portes ;  var porte_numero,etage,colonne : integer ; var portes_sur_etage:tab_int);
    
    
    Implementation
    Mais il me dis alors à la compilation ,

    1 / 1 logique.pas
    Fatal: Syntax error, UNIT expected but PROGRAM found










    Mais logique puisque logique n'est pas une unité et Uses s'utilise que pour une unité!
    Comment faire ? Si j'enleve uses il ralera sur la declaration de tab_portes?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Par défaut
    Définition de mon cours :

    la partie interface :
    Nous pouvons désigner également la partie interface en tant que partie publique.
    Elle contient toutes les constantes , types de données , variables , fonctions et procédures , accessibles à d'autres unités ou programmes.

    Elle est sensé contenir le type tab_portes

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

Discussions similaires

  1. [Dev-Pascal] [Free Pascal] Erreurs de compilation avec Link.res
    Par swayly dans le forum Autres IDE
    Réponses: 7
    Dernier message: 16/03/2008, 01h37
  2. [Free Pascal] Paramètres de Compilation FPC
    Par Ultima dans le forum Free Pascal
    Réponses: 6
    Dernier message: 11/02/2007, 01h30
  3. Réponses: 8
    Dernier message: 05/02/2007, 09h56
  4. [Free Pascal] Erreur lors de l'éxecution. (exitcode = 106)
    Par phoebos dans le forum Free Pascal
    Réponses: 2
    Dernier message: 03/03/2006, 22h24
  5. [Dev-Pascal] [1.9.2][Free Pascal] Problème de compilation avec Link.res
    Par Epotcirk dans le forum Autres IDE
    Réponses: 2
    Dernier message: 09/02/2006, 10h16

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