Constant expression violates subrange bounds [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005
-
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015
-
Salut,
J'ai l'erreur "Constant expression violates subrange bounds" sur la ligne suivante de mon code
else if (Ordi.nbLancers<NbTours) and (Ordi.Jet in [211, 311, 411]) then ...

à l'endroit suivant : Ordi.Jet in [211, 311, 411]
Or Ordi.jet est un integer

je vois pas en koi je dépasse le rang d'un interger

ps:Ordi.Jet in [211] fonctionne)

6 réponses

Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015

si tu enlève concat :

TS:TStringList;
begin
.....
TS:=TStringList.Create;
TS.SetText(pchar('211'^M'311'^M'411'));
......
else if (Ordi.nbLancers<NbTours) and (TS.IndexOf(inttostr(Ordi.Jet))<>-1) then ...

Ts.Free;

end;


Mais je reprécise que ça peut consommer de la mémoire si on traite en itératif...

N'oubliez pas de cliquer sur Réponse acceptée si c'est OK

DrJerome
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015

Tu ne peux pas dépasser 255 avec 'in'

DrJerome
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015

soit tu fais un array style :

const
MonArray:array[1..3]of integer= (211,311,411);
begin
......
for i:=1 to 3 do if Ordi.Jet=Monarray[i] then...

end;


ou alors pour pas te casser la tête, si ça ne gène pas au niveau utilisation de mémoire :

TS:TStringList;
begin
.....
TS: =TStringList.Create;
TS.SetText(pchar(concat('211',^M,'311',^M,'411')));
......
else if (Ordi.nbLancers<NbTours) and (TS.IndexOf(inttostr(Ordi.Jet))<>-1) then ...

Ts.Free;

end;


^M c'est #13 (un passage à la ligne), je l'ai mis "pour la frime"
^J (que je n'utilise pas ici) c'est #10 etc...

N'oubliez pas de cliquer sur Réponse acceptée si c'est OK

DrJerome
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005

Ok merci beaucoups ;)
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005

En fait j'ai préféré mettre

else if (Ordi.nbLancers<NbTours) and ((Ordi.Jet=211) or (Ordi.Jet=311) or (Ordi.Jet=411)) then ...
Messages postés
436
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 février 2015

super c'est encore mieux et plus optimisé ;)

DrJerome