Constant expression violates subrange bounds [Résolu]

Sloridan 20 Messages postés vendredi 24 décembre 2004Date d'inscription 7 janvier 2005 Dernière intervention - 2 janv. 2005 à 14:25 - Dernière réponse : DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention
- 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)
Afficher la suite 

6 réponses

Répondre au sujet
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 2 janv. 2005 à 19:17
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de DRJEROME
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 2 janv. 2005 à 18:33
0
Utile
Tu ne peux pas dépasser 255 avec 'in'

DrJerome
Commenter la réponse de DRJEROME
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 2 janv. 2005 à 18:47
0
Utile
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
Commenter la réponse de DRJEROME
Sloridan 20 Messages postés vendredi 24 décembre 2004Date d'inscription 7 janvier 2005 Dernière intervention - 2 janv. 2005 à 19:24
0
Utile
Ok merci beaucoups ;)
Commenter la réponse de Sloridan
Sloridan 20 Messages postés vendredi 24 décembre 2004Date d'inscription 7 janvier 2005 Dernière intervention - 2 janv. 2005 à 19:30
0
Utile
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 ...
Commenter la réponse de Sloridan
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 2 janv. 2005 à 20:05
0
Utile
super c'est encore mieux et plus optimisé ;)

DrJerome
Commenter la réponse de DRJEROME

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.