digitalmars.D.learn - inheritance from abstract broken?
- evilrat (31/31) Jan 08 2014 Greetings everyone,
- Mike Parker (9/40) Jan 08 2014 You're constructing a MyObjectA instance, not a MyObject, so the
- evilrat (2/57) Jan 08 2014 ok. gotta using mixins :(
- Gary Willoughby (9/10) Jan 08 2014 Just use another ctor.
- evilrat (3/13) Jan 08 2014 i do this in template. just a bit sad using mixin everywhere.
- Jacob Carlborg (4/35) Jan 08 2014 Unfortunately constructors are not inherited.
Greetings everyone, i have the code where i have to keep pointers to so storage(context dependent stuff), so i tried declare abstract class with ctors and it didn't worked. ------- [code] class MyContext; abstract class MyObject { // yet another bug? all descendants errors no default ctor... this() {} this(MyContext mc) { } MyContext _owner; } class MyObjectA : MyObject { ... } //inside MyContext.CreateObj MyObject CreateMyObj() { auto obj = new MyObjectA(this) // two errors produced ... do something with obj before returning it ... return obj; } errors: ----------- Error: no constructor for MyObjectA Error: constructor MyObjectA.this () is not callable using argument types (MyContext) -------- am i wrong about abstract classes usage in D or this is a bug?
Jan 08 2014
On 1/8/2014 9:22 PM, evilrat wrote:Greetings everyone, i have the code where i have to keep pointers to so storage(context dependent stuff), so i tried declare abstract class with ctors and it didn't worked. ------- [code] class MyContext; abstract class MyObject { // yet another bug? all descendants errors no default ctor... this() {} this(MyContext mc) { } MyContext _owner; } class MyObjectA : MyObject { ... } //inside MyContext.CreateObj MyObject CreateMyObj() { auto obj = new MyObjectA(this) // two errors produced ... do something with obj before returning it ... return obj; } errors: ----------- Error: no constructor for MyObjectA Error: constructor MyObjectA.this () is not callable using argument types (MyContext) -------- am i wrong about abstract classes usage in D or this is a bug?You're constructing a MyObjectA instance, not a MyObject, so the compiler is looking for a constructor in MyObjectA that takes a MyContext param. class MyObjectA : MyObject { this(MyContext mc) { super(mc); } }
Jan 08 2014
On Wednesday, 8 January 2014 at 12:29:48 UTC, Mike Parker wrote:On 1/8/2014 9:22 PM, evilrat wrote:ok. gotta using mixins :(Greetings everyone, i have the code where i have to keep pointers to so storage(context dependent stuff), so i tried declare abstract class with ctors and it didn't worked. ------- [code] class MyContext; abstract class MyObject { // yet another bug? all descendants errors no default ctor... this() {} this(MyContext mc) { } MyContext _owner; } class MyObjectA : MyObject { ... } //inside MyContext.CreateObj MyObject CreateMyObj() { auto obj = new MyObjectA(this) // two errors produced ... do something with obj before returning it ... return obj; } errors: ----------- Error: no constructor for MyObjectA Error: constructor MyObjectA.this () is not callable using argument types (MyContext) -------- am i wrong about abstract classes usage in D or this is a bug?You're constructing a MyObjectA instance, not a MyObject, so the compiler is looking for a constructor in MyObjectA that takes a MyContext param. class MyObjectA : MyObject { this(MyContext mc) { super(mc); } }
Jan 08 2014
On Wednesday, 8 January 2014 at 12:40:39 UTC, evilrat wrote:ok. gotta using mixins :(Just use another ctor. class MyObjectA : MyObject { this(MyContext mc) { super(mc); } }
Jan 08 2014
On Wednesday, 8 January 2014 at 14:01:43 UTC, Gary Willoughby wrote:On Wednesday, 8 January 2014 at 12:40:39 UTC, evilrat wrote:i do this in template. just a bit sad using mixin everywhere.ok. gotta using mixins :(Just use another ctor. class MyObjectA : MyObject { this(MyContext mc) { super(mc); } }
Jan 08 2014
On 2014-01-08 13:22, evilrat wrote:Greetings everyone, i have the code where i have to keep pointers to so storage(context dependent stuff), so i tried declare abstract class with ctors and it didn't worked. ------- [code] class MyContext; abstract class MyObject { // yet another bug? all descendants errors no default ctor... this() {} this(MyContext mc) { } MyContext _owner; } class MyObjectA : MyObject { ... } //inside MyContext.CreateObj MyObject CreateMyObj() { auto obj = new MyObjectA(this) // two errors produced ... do something with obj before returning it ... return obj; } errors: ----------- Error: no constructor for MyObjectA Error: constructor MyObjectA.this () is not callable using argument types (MyContext) -------- am i wrong about abstract classes usage in D or this is a bug?Unfortunately constructors are not inherited. -- /Jacob Carlborg
Jan 08 2014