Thread overview | |||||
---|---|---|---|---|---|
|
October 14, 2005 Nested class constructors | ||||
---|---|---|---|---|
| ||||
DMD 0.135, Windows XP Service Pack 2. class A { class B { this() {} void foo() { new B(); } } } -> "no 'this' for nested class B" Am I missing something obvious, doing something wrong, or is this a bug? |
October 15, 2005 Re: Nested class constructors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Deewiant | "Deewiant" <deewiant.doesnotlike.spam@gmail.com> wrote in message news:dionmt$afm$1@digitaldaemon.com... > DMD 0.135, Windows XP Service Pack 2. > > class A { > class B { > this() {} > > void foo() { > new B(); > } > } > } > > -> "no 'this' for nested class B" > > Am I missing something obvious, doing something wrong, or is this a bug? I'm not 100% sure, but I don't think non-static nested classes can have user-defined constructors. Try these: 1) Remove B's constructor. The compiler will add a default which you can use. 2) change B's declaration to this: static class B. The only downside is you won't be able to access A's members without maintaining a reference to an instance of A. But you'll also be able to add your own constructors. |
October 17, 2005 Re: Nested class constructors | ||||
---|---|---|---|---|
| ||||
Posted in reply to Deewiant | On Fri, 14 Oct 2005 18:52:09 +0200, Deewiant <deewiant.doesnotlike.spam@gmail.com> wrote: > DMD 0.135, Windows XP Service Pack 2. > > class A { > class B { > this() {} > > void foo() { > new B(); > } > } > } > > -> "no 'this' for nested class B" > > Am I missing something obvious, doing something wrong, or is this a bug? Nonstatic nested classes contain secret pointer to enclosing class. Creating them is possible only in that enclosing class (and this pointer is passed secretly). In A.B.foo() you probably want to create B instance with secret pointer same as in current instance. You probably could create A.newB() like that: class A { ... B newB() { return new B(); } ... } and use it insted of "new B();". But I think what you're tried could be allowed to. -- Dawid Ciężarkiewicz |
Copyright © 1999-2021 by the D Language Foundation