Constant expression violates subrange bounds

Résolu
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005 - 2 janv. 2005 à 14:25
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015 - 2 janv. 2005 à 20:05
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

DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
2 janv. 2005 à 19:17
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
3
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
2 janv. 2005 à 18:33
Tu ne peux pas dépasser 255 avec 'in'

DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
2 janv. 2005 à 18:47
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
0
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
2 janv. 2005 à 19:24
Ok merci beaucoups ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
2 janv. 2005 à 19:30
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 ...
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
2 janv. 2005 à 20:05
super c'est encore mieux et plus optimisé ;)

DrJerome
0
Rejoignez-nous