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 :

Pointeurs et généricité [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut Pointeurs et généricité
    Bonjour à tous !

    Je suis étudiant en L2 de maths et j'ai un problème assez insoluble (pour moi) en Pascal.

    Voila mon problème :

    J'utilise ces types :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    type
       TListeRec		 = ^T_listeDefAux;
       T_listeDefAux	 = record
    			      e	: pointer;
    			      s	: TListeRec
    			   end;	
     
    type TMCreuse=record
             largeur:integer;
             hauteur:integer;
             Val_maj:pointer;
             cases:TListeRec
    Jusque là ça va !

    Mais ça se complique sur un code comme celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
     aux:T_listeDefAux;
     abscisse:integer;
     MC:TMcreuse;
     
    begin
     aux:=MC.cases^;
     abscisse>aux.e^.abscisse
    end;
    (en supposant que MC.cases<>NIL évidemment ! )

    En effet, le problème vient du fait que aux.e est défini comme un pointeur générique et lorsqu'on cherche à utiliser aux.e^.abscisse, le compilateur provoque une erreur même si on a effectivement assigné à aux.e^ un enregistrement avec abscisse.

    Comment régler ce problème ?

    En gros, pour faire simple. J'ai un pointeur générique auquel j'assigne un enregistrement avec comme "sous valeur" abscisse (et d'autres choses). Comment faire pour utiliser e^.abscisse ? Le compilateur ne "voit" pas que dans le e^, il y a bien un enregistrement avec abscisse.

    Je ne suis pas sûr d'être clair... Mais si vous comprennez, , je veux bien de l'aide, parce que là...

    Merci !

    PS : c'est pour un projet dans le module "Structures de données" de L2 Maths Fondamentales. L'idée est de créer un tableur en utilisant les matrices creuses. (matrices avec une valeur majoritaire et quelques valeurs modifiées)

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Mais e doit pointer sur des variables de quel type ? Il serait pas possible de créer un autre type de variable ?

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Lai,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
    aux:=MC.cases^;
    abscisse>aux.e^.abscisse
    end;
    De toute manière, tu n'as aucun type (dans le code que tu nous montres) ayant un champ abscisse

    Quelques balises [ code] ne seraient pas superflues

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 055
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Tu peux déclarer e comme étant de type pInteger :
    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
    TListeRec		 = ^T_listeDefAux;
       T_listeDefAux	 = record
    			      e	: pInteger;
    			      s	: TListeRec
    			   end;
     
    var
      aux:T_listeDefAux;
      abscisse:integer;
     
    begin
     
      abscisse := aux.e^;
     
    end.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Par défaut
    J'aurais même tendance a dire que e est de type '^integer' ...

    Sinon, j'ai un probleme sur le meme projet (un camarade de la fac de Nantes )... Et celui ci est plutot twisted !
    Quelque soit le programme que je veut faire je n'ai aucun probleme lorsque je veut faire new(p) du moment que p est un pointeur typé (oui monsieur Lamarre je le dispose apres non aie me tapez pas !!! )
    MAIS dans ma derniere UNIT en date mysterieusement le compilateur est alergique aux new ... c'est à n'y rien paner !
    je copie tout mon code je le remet dans un nouveau fichier je compile et ca marche ...

  6. #6
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Si avec le même code et le même compilateur ça ne marche pas dans un cas (quand c'est dans un fichier f1) et ça marche dans l'autre (fichier f2) alors il est possible que ce soit dû à l'encodage du fichier (ANSI, Unicode, etc.).

    J'avais eu un problème similaire il y'a quelque temps et dans un autre langage et je crois que l'encodage du fichier était la source du problème. Celà dit je ne suis plus totalement sûr que c'était bien ça et il est possible aussi que la cause de ton problème soit différente.

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

Discussions similaires

  1. pointeurs
    Par ghost74 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2002, 02h52
  2. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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