Access vialotion

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 23 06:42:49 PDT 2016


On 6/22/16 9:00 AM, Moro Greenhand wrote:
> On Wednesday, 22 June 2016 at 12:47:31 UTC, TheDGuy wrote:
>> On Wednesday, 22 June 2016 at 12:45:29 UTC, TheDGuy wrote:
>>> I have an array of buttons:
>>>
>>> class Window : MainWindow{
>>>     private Button[4] bArr;
>>>     this(){
>>>         Button btn_1 = new Button();
>>>         Button btn_2 = new Button();
>>>         Button btn_3 = new Button();
>>>         Button btn_4 = new Button();
>>>         Button[4] bArr = [btn_1,btn_2,btn_3,btn_4];
>>>     }
>>>     private void letButtonsFlash(){
>>>         for(int i = 0; i < 4; i++){
>>>             writeln(this.bArr[i].getName());
>>>         }
>>>     }
>>> }
>>>
>>> i don't understand why i get an 'Access Violation' - Error in the
>>> 'for'-loop?
>>
>> Okay, i solved it, instead of:
>> Button[4] bArr = [btn_1,btn_2,btn_3,btn_4];
>>
>> this:
>> bArr = [btn_1,btn_2,btn_3,btn_4];
>
> I would expect DMD to output a warning here, because of the
> shadowing...but after 3 verifications, nothing. Dscanner does.

Variable shadowing only is reported by the compiler for function locals. 
That is, variables cannot shadow other variables from the same function. 
It allows shadowing of variables outside the function. This is 
deliberate. Otherwise, someone may name a variable somewhere else the 
same as yours, and your perfectly working code is now flagged as an error.

-Steve


More information about the Digitalmars-d-learn mailing list