Lack of `outer` keyword makes inner class dup implossible
S.
S._member at pathlink.com
Mon Jul 17 09:31:44 PDT 2006
In article <e9gck1$grg$1 at digitaldaemon.com>, Frits van Bommel says...
>
>S. wrote:
>> In article <e9e8h8$1asn$1 at digitaldaemon.com>, Frits van Bommel says...
>>> S. Chancellor wrote:
>>>> Exactly. Interestingly though I tried this:
>>>>
>>>> class Board {
>>>> Board outer;
>>>> this() { outer = this; }
>>>> class Cell {
>>>> Cell dup() {
>>>> return new outer.Cell;
>>>> }
>>>> }
>>>>
>>>> and I get syntax errors. This new expression stuff seems broken.
>>> First thing you'll want to do is close all your braces. You missed one :).
>>>
>>> The 'new' syntax is a bit weird for inner classes I think. This should work:
>>>
>>> class Board {
>>> Board outer;
>>> this() { outer = this; }
>>> class Cell {
>>> Cell dup() {
>>> return outer.new Cell;
>>> }
>>> }
>>> }
>>>
>>> I agree that 'new outer.Cell' is a more intuitive syntax for this, but
>>> that's just not the way it works...
>>> This is also the syntax for 'new'ing an inner class in Java, IIRC. I
>>> remember tripping over the syntax a couple of times when I was using
>>> Java. (I haven't needed inner classes in D yet[1])
>>>
>>> See also http://www.digitalmars.com/d/class.html (almost at the very
>>> end, just above the heading "Anonymous Nested Classes")
>>
>> I made some typo's -- that is not the verbatim code I was tring to compile. I
>
>Copy-paste is very handy when complaining about compile errors ;).
>You might want to copy-paste the errors themselves too.
>
>> had outer.new Cell and all my braces closed. Did you try to compile yours?
>
>Yes I did. And I just did it again. Compiles just fine:
>
> D:\Temp>cat test.d
> class Board {
> Board outer;
> this() { outer = this; }
> class Cell {
> Cell dup() {
> return outer.new Cell;
> }
> }
> }
> D:\Temp>dmd -c test.d
>
> D:\Temp>
>
>That's DMD v0.161 though. v0.162 has an unrelated bug causing it to
>segfault when compiling some of my code :(.
The problem I discovered was in the error message and dlint. Dlint was
highlighting that line and the compiler was generating an error about an
indentifier without quoting it. It just so happened my variable name fit in
strangely with the message -- leaving me highly confused.
Everything works now.
-S.
More information about the Digitalmars-d
mailing list