Access outer member of struct from inner struct
Q. Schroll
qs.il.paperinik at gmail.com
Tue Apr 2 19:04:00 UTC 2019
On Tuesday, 2 April 2019 at 18:52:07 UTC, Jacob Carlborg wrote:
> On 2019-04-02 20:44, Q. Schroll wrote:
>
>> After removing the calls to writeln, the error I get is:
>>
>>> `this` for `read` needs to be type `Outer` not type `Inner`
>>
>> You cannot access stuff in Outer because Inner objects are not
>> outer objects and don't implicitly own an Outer object. In
>> your Inner method `write`, there is no Outer object present at
>> all to call the method on.
>
> It works if the struct is nested inside a function [1]. I
> thought it would work nested inside a struct too.
>
> [1] https://dlang.org/spec/struct.html#nested
The reason it works inside a function is that the struct has a
hidden pointer to the function context. The function's local
values actually exist when an object of that struct type is being
instantiated.
The main difference between a struct nested in a function and one
inside another struct is that the one in a function cannot¹ be
created outside of that function while constructing the latter is
possible the way you think it is:
Outer.Inner innerObj = Outer.Inner(parameters);
¹ You can using reflection and stuff like that, but it's still
broken if it uses the context.
More information about the Digitalmars-d-learn
mailing list