digitalmars.D.learn - Array of derived class objects?
- H. S. Teoh (18/18) Mar 06 2012 Code:
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (5/21) Mar 06 2012 That's probably this bug:
- Andrej Mitrovic (5/5) Mar 06 2012 You can use a cast as a workaround:
- simendsjo (4/22) Mar 06 2012 I have no idea (and haven't read TDPL), but adding a new A somewhere in ...
Code: // test.d class A {} class B : A {} class C : A {} void main() { A[] objs = [ new B, new C ]; // line 6 } Compiler error: test.d(6): Error: cannot implicitly convert expression (new B) of type test.A to test.C test.d(6): Error: cannot implicitly convert expression ([(__error),new C]) of type C[] to A[] I thought D was supposed to automatically infer the most derived common base class to assign to an array literal of different types? At least, that's the impression I got from TDPL. What am I doing wrong? T -- MAS = Mana Ada Sistem?
Mar 06 2012
On 03/06/2012 11:27 AM, H. S. Teoh wrote:Code: // test.d class A {} class B : A {} class C : A {} void main() { A[] objs = [ new B, new C ]; // line 6 } Compiler error: test.d(6): Error: cannot implicitly convert expression (new B) of type test.A to test.C test.d(6): Error: cannot implicitly convert expression ([(__error),new C]) of type C[] to A[] I thought D was supposed to automatically infer the most derived common base class to assign to an array literal of different types? At least, that's the impression I got from TDPL. What am I doing wrong? TThat's probably this bug: http://d.puremagic.com/issues/show_bug.cgi?id=5498 Luckily it has a pull request. Ali
Mar 06 2012
You can use a cast as a workaround: A[] objs = [cast(A)new B, new C ]; This bug has been around for a while, the first time I've seen it mentioned was in the second code snippet in this blog post: http://klickverbot.at/blog/2010/11/announcing-d-support-in-swig/
Mar 06 2012
On Tue, 06 Mar 2012 20:27:56 +0100, H. S. Teoh <hsteoh quickfur.ath.cx> wrote:Code: // test.d class A {} class B : A {} class C : A {} void main() { A[] objs = [ new B, new C ]; // line 6 } Compiler error: test.d(6): Error: cannot implicitly convert expression (new B) of type test.A to test.C test.d(6): Error: cannot implicitly convert expression ([(__error),new C]) of type C[] to A[] I thought D was supposed to automatically infer the most derived common base class to assign to an array literal of different types? At least, that's the impression I got from TDPL. What am I doing wrong? TI have no idea (and haven't read TDPL), but adding a new A somewhere in the array makes it work. Compiler bug..?
Mar 06 2012