[fpc-pascal] private integer is an illegal counter variable
f26p at eircom.net
Fri Nov 27 22:52:30 CET 2009
Jonas Maebe wrote:
> On 27 Nov 2009, at 15:49, Juha Manninen wrote:
>> If I define a private integer:
>> TDemo = class(TCustomApplication)
>> i: integer;
>> and in a protected method I use it:
>> for i := 0 to List.Count - 1 do
>> then I get an error:
>> Error: Illegal counter variable
>> Moving it to method's var section helps.
>> Method's var section is also better place for it in general, but still it
>> should be legal to use a private member as counter var.
> The reason is that a for-loop tries to make a number of reasonable
> guarantees that the counter variable cannot be modified during the loop.
> E.g., direct assignments to a counter variable are forbidden inside the
> loop (except in TP-mode). If you use a private field, then any method of
> that class called in the body of the loop can easily (accidentally)
> change the value of the counter variable, completely messing up the loop.
In any case, why would one want a loop counter to have any more than the
minimum possible scope? Why would one want it to be a class data member
at all? Surely it would be far better/neater/more elegant, if it is used
by methods, to pass it as a parameter?
More information about the fpc-pascal