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 Pascal Discussion :

Conflit entre classe et record


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Conflit entre classe et record
    Bonjour,

    Une classe peut-elle contenir une variable de type record ?

    Le code suivant ne compile pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TAnimal = class
      strict private
        TMember: record
          firstname, surname: string;
        end;
        member: TMember; // erreur à la compilation
        fichier: file of TMember; // erreur à la compilation
    Remerciement à tous.

  2. #2
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Il y a une confusion dans votre code. Voici une version corrigée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type
      TMember = record
        firstname, surname: string[100];
      end;
     
      TAnimal = class 
        FMember: TMember;
        FFichier: file of TMember;
      end;
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Conflit entre classe et record
    merci à Monsieur Roland Chastain.

    1 - la réponse semble être : on ne peut pas définir un type dans la classe mais à l'extérieur de la classe

    2 - chaque élément d'un record doit avoir une longueur fixe.

    remerciement


  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par franky_miky Voir le message
    on ne peut pas définir un type dans la classe
    Oui, mais de toute façon dans votre exemple vous ne déclarez pas un type mais une variable, comme si vous écriviez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      record1: record
        a, b: string[100];
      end;
    Alors que la déclaration du type serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    type
      TRecord1 = record
      ...
    Citation Envoyé par franky_miky Voir le message
    chaque élément d'un record doit avoir une longueur fixe
    Je ne sais pas si c'est absolument vrai. C'est vrai lorsqu'on veut créer un fichier d'enregistrements, dont tous les éléments doivent avoir la même taille.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par franky_miky Voir le message
    merci à Monsieur Roland Chastain.

    1 - la réponse semble être : on ne peut pas définir un type dans la classe mais à l'extérieur de la classe

    2 - chaque élément d'un record doit avoir une longueur fixe.

    remerciement

    trois choses:

    1) pour déclarer un type interne à l'objet il faut utiliser le mot clé "type", puis le mot clé "var" pour déclarer les membres
    2) la déclaration d'un type se fait avec "=" et non ":", sinon c'est une déclaration variable de type record.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TAnimal = class
      strict private
      type // déclaration d'un type
        TMember= record // déclaration et non variable !
          firstname, surname: string;
        end;
      var
        member: TMember; 
        fichier: file of TMember; // erreur à la compilation
      end;
    3) c'est "file of" qui demande des structures de tailles fixes et surtout non dynamiques; là on a deux string qui sont des pointeurs de taille fixe (4 octets) mais dynamiques (allocation dynamique de la chaîne).
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Tiens, je n'avais jamais fait attention qu'on pouvait déclarer un type dans une classe. Au temps pour moi !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Conflit entre classe et record
    bonjour
    la réponse de Monsieur Paul TOTH me satisfait pleinement.
    remerciements à tous

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

Discussions similaires

  1. [script.aculo.us] Conflit entre 2 classes "clé en main" (autosuggest)
    Par marsupix dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 29/08/2007, 17h31
  2. Conflit entre class et struct
    Par Mortada dans le forum C++
    Réponses: 33
    Dernier message: 19/07/2007, 18h15
  3. Conflit entre java.util.Date et class java.sql.Date
    Par vonitiana dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2006, 11h43
  4. conflit entre les classe java.sql.* et java.util.*;
    Par obydissonn dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2006, 18h00
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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