alias can't find symbol or can't use symbol
    bauss via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sat Apr 29 19:19:29 PDT 2017
    
    
  
On Sunday, 30 April 2017 at 00:17:37 UTC, Carl Sturtivant wrote:
> Consider the following.
>
> struct member
> {
>     int n;
> }
>
> struct outer
> {
>     member x;
>     alias x this;
>     alias n2 = n;
> }
>
> This does not compile: alias n2 = n;
> Error: undefined identifier 'n'
>
> On the other hand if change that into
>     alias n2 = x.n;
> then it does compile.
>
> void main()
> {
>     outer o;
>     o.n2 = 5;
> }
>
> Now this code doesn't compile: o.n2 = 5;
> Error: need 'this' for 'n' of type 'int'
>
> Given that one struct inside another is a static situation, 
> this seems unnecessarily strict. It's getting in the way of 
> some name management with `alias this`. What's the rationale 
> here?
What exactly did you expect here?
'n' is not in the scope of 'outer'.
'n' is in the scope of 'member'.
Of course it works with 'x.n' since 'x' points to the 'member' 
declared inside 'outer'.
I mean it would have worked with classes, but structs are 
different does not have any type of actual inheritance, which is 
what you're trying to achieve.
```
class member {
     int n;
}
class outer : member {
     alias n2 = n; // Ok ...
}
```
    
    
More information about the Digitalmars-d-learn
mailing list