digitalmars.D.learn - Class-Inheritancing Error
- David T. Oxygen (24/24) Jul 27 I wrote a piece of code like this:
- H. S. Teoh (7/32) Jul 27 Can you explain more why do you want to alias super to this? A derived
- user1234 (14/51) Jul 27 Simply because because if OP writes
- H. S. Teoh (14/32) Jul 28 Oh I see. So just write a forwarding ctor:
- David T. Oxygen (8/40) Jul 28 Thank you very much.
I wrote a piece of code like this: ```d class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ alias super this; } void main(){ Someone x=new Someone("Bob"); } ``` And then,I got a Error-Message: ``` ab.d(6): Error: variable name expected after type `super`, not `this` alias super this; ^ ab.d(6): `this` is a keyword, perhaps append `_` to make it an identifier ``` Who knows why I can't use `alias this` there? Please tell me,thanks very much. I'm waiting for you.
Jul 27
On Sun, Jul 27, 2025 at 11:08:33AM +0000, David T. Oxygen via Digitalmars-d-learn wrote:I wrote a piece of code like this: ```d class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ alias super this; } void main(){ Someone x=new Someone("Bob"); } ``` And then,I got a Error-Message: ``` ab.d(6): Error: variable name expected after type `super`, not `this` alias super this; ^ ab.d(6): `this` is a keyword, perhaps append `_` to make it an identifier ``` Who knows why I can't use `alias this` there? Please tell me,thanks very much. I'm waiting for you.Can you explain more why do you want to alias super to this? A derived class already inherits its base class's members, there's no need to explicitly alias it. T -- Fact is stranger than fiction.
Jul 27
On Sunday, 27 July 2025 at 15:14:03 UTC, H. S. Teoh wrote:On Sun, Jul 27, 2025 at 11:08:33AM +0000, David T. Oxygen via Digitalmars-d-learn wrote:Simply because because if OP writes ``` class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ } void main(){ Someone x=new Someone("Bob"); } ``` then he gets rewarded withI wrote a piece of code like this: ```d class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ alias super this; } void main(){ Someone x=new Someone("Bob"); } ``` And then,I got a Error-Message: ``` ab.d(6): Error: variable name expected after type `super`, not `this` alias super this; ^ ab.d(6): `this` is a keyword, perhaps append `_` to make it an identifier ``` Who knows why I can't use `alias this` there? Please tell me,thanks very much. I'm waiting for you.Can you explain more why do you want to alias super to this? A derived class already inherits its base class's members, there's no need to explicitly alias it. TError: class `Someone` cannot implicitly generate a default constructor when base class `Person` is missing a default constructor
Jul 27
On Sun, Jul 27, 2025 at 05:02:35PM +0000, user1234 via Digitalmars-d-learn wrote: [...]Simply because because if OP writes ``` class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ } void main(){ Someone x=new Someone("Bob"); } ``` then he gets rewarded withOh I see. So just write a forwarding ctor: ``` class Someone : Person { this(string name) { super(name); } ... } ``` Or use the mixin template I wrote in the other thread to auto-generate forwarding ctors, if you have many subclasses that need forwarding. T -- If you can't deal with your problems, try becoming a school bus driver. Then all your problems will be behind you.Error: class `Someone` cannot implicitly generate a default constructor when base class `Person` is missing a default constructor
Jul 28
On Monday, 28 July 2025 at 18:02:45 UTC, H. S. Teoh wrote:On Sun, Jul 27, 2025 at 05:02:35PM +0000, user1234 via Digitalmars-d-learn wrote: [...]Thank you very much. As "user1234" said, I just wanted to inheritance the constructor method in the baseclass. I have already tried your way to solve the problem,it could work. But I still want to know why my code could raise an error.And what's your mixin-template? Would you be so kind to show me this template? I would be grateful if you can share it.Simply because because if OP writes ``` class Person{ string name; this(string name){this.name=name;} } class Someone:Person{ } void main(){ Someone x=new Someone("Bob"); } ``` then he gets rewarded withOh I see. So just write a forwarding ctor: ``` class Someone : Person { this(string name) { super(name); } ... } ``` Or use the mixin template I wrote in the other thread to auto-generate forwarding ctors, if you have many subclasses that need forwarding. TError: class `Someone` cannot implicitly generate a default constructor when base class `Person` is missing a default constructor
Jul 28