Constante d'un record contenant des record [Résolu]

Signaler
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
salut a tous, mon probleme est assez simple a ennoncer, mais je ne comprend pas pourquoi ca ne marche pas.
Je cherche a faire des constantes sur mes records, qui sont structures ainsi :

type
    point = record
       x: extended;
       y: extended;
       z: extended;
    end;
const
    pointNul : point = (x: 0; y: 0; z:0);

function setPoint(x,y,z: extended): point;

type
    repere = record
       o: point;
       x: point;
       y: point;
    end;

const
    repereStandard: repere = ( o: (x:0;y:0;z:0); x: (x:1;y:0;z:0); y: (x:0;y:1;z:0)); //celui ci marche
    repereStandard: repere = ( o: pointNul; x: setPoint(1,0,0); y: setPoint(0,1,0)); //la je voudrais utiliser des constantes/fonctions

donc je souhaiterais savoir si il est possible d'utiliser des constantes/fonctions dans la declaration ci dessus.

merci de votre aide

   

9 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
112
Tu ne peux pas:
- Tu ne peux pas executer de fonctions dans les constantes.
- pointNul est un type et non une valeur.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
ah ok... ben tu peu pas.

a moins de faire :

procedure ParamDefault; overload; forward;

procedure ParamDefault(const Repere : TReperePEX); overload; forward;

procedure ParamDefault;

begin
   ParamDefault(ReperePEXNul);
end;

procedure ParamDefault(const Repere : TReperePEX);

begin
   ... traitement ...
end;

<hr size="2" width="100%" />Croc (click me)
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
pointNul est un type? meme si il est declaré dans la partie const?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
et donc je ne peux pas declarer une fonction avec en parametre pointNul?

procedure MaProc(UnPoint: point = pointNul);

?
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
112
pointNul n'est pas un type, j'ai parler trop vite (l'habitude du C). C'est pour ca que j'ai corrigé... Mais mon browser a quand meme envoyé l'autre avant que j'ai eu le temps d'annuler.

Par contre je maintiens que tu ne puisse pas executer de fonctions dans un déclaration de constantes. Si tu mets une fonctions dans une constantes, le resultat devient depedant de la fonction et n'est donc plus constant...
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
et en ce qui concerne le const en parametre par defaut d'une fonction?
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
oui on ne peu mettre de fonctions dans les declarations de constante.
par contre tu peu declarer tes constantes en variables et les initialisées dans la partie Initialization de l'unité.

attention aux identifiants existant et aux conventions d'ecriture!

type
    TPointEx = record
       x,y,z: extended;
    end;

    TReperePEX = record
       rO,rX,rY : TPointEx;
    end;

function PointEx(const Ax,Ay,Az : extended) : TPointEx;
begin
  result.X := Ax;
  result.Y := Ay;
  result.Z := Az;
end;

<hr size="2" width="100%" />Croc (click me)
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
heu je crois que tu n'as pas bien compris ma question foxi.
ce que je veux faire, c'est passer une constante que j'ai cree en tant que parametre par defaut d'une fonction.
pour reprendre ton exemple, j'aurai :

const
    ReperePEXNul: TReperePEX = (rO: (x:0;y:0;z:0); rX: (x:1;y:0;z:0); rY: (x:0;y:1;z:0));

et je voudrais faire une fonction qui prenne cette constante en parametre par defaut :

procedure ParamDefaut(repere: TReperePEX = ReperePEXNul);

mais apparament, je ne peux pas passer ReperePEXNul comme valuer par defaut !!!
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
ok, merci tout le monde :)