On Friday, 20 May 2016 at 15:07:53 UTC, chmike wrote:
The error message is gone, but I now have another compilation error message I don't understand.

This is what I have in fact

interface Info { . . . }

class MyInfos {
   . . .
protected:
   class Obj : Info
   {
       . . .
   }

public:
   static immutable Obj one = new immutable Obj(...);
   static immutable Obj two = new immutable Obj(...);
}

I get a compiler error in the two assignments to the static Obj member variables: 'this' is only defined in non-static member functions, not MyInfos

Is it related to the fact that the Obj class is encapsulated ?

Yes, nested classes have an implicit reference to their parent object, which doesn't exist in your case.



My goal is to be able to write things like this:

void main() {
   Info x1 = MyInfos.one, x2 = MyInfo.two, x3;
   assert(x3 is null);
   x3 = x1;
   assert(x3 is x1);
   assert(x3 is MyInfo.one);

// Use static immutable instance references as case arg in switch
   switch(x1) {
   case MyInfo.one: ...;
   }
}

It looks like your don't actually need `Obj` to be a real nested class. Try declaring it as `static Obj : Info { }`. This should work if `Obj`'s methods don't need access to `MyInfo`'s non-static members.

Reply via email to