digitalmars.D.bugs - inheritance problem
- bayo (20/20) Apr 26 2007 Hello, i currently use DMD 1.013 for Windows and i cant compile this cod...
- =?ISO-8859-1?Q?Jari-Matti_M=E4kel=E4?= (7/37) Apr 26 2007 Yes, this is how inheritance works in D.
- bayo (3/47) Apr 26 2007 Realy hard to me to understand this limitation if we can "patch" it with...
- Derek Parnell (19/66) Apr 26 2007 Well "limitation" may be a bit harsh. Inheritance is available but it is
Hello, i currently use DMD 1.013 for Windows and i cant compile this code class C1 { public void add(int i, int j) {} } class C2 : C1 { public void add(int i) {} } void main() { C2 c = new C2(); c.add(1, 2); } src\inheritance.d(16): function inheritance.C2.add (int) does not match parameter types (int,int) I dont use D for a long time, but i dont remember having problem like this? So anybody can help me: *Is there a problem on my code? *Is it a desired limitation? *Can i use another version of DMD to remove this problem? Thanks a lot for your help. -bayo
Apr 26 2007
bayo kirjoitti:Hello, i currently use DMD 1.013 for Windows and i cant compile this code class C1 { public void add(int i, int j) {} } class C2 : C1 { public void add(int i) {} } void main() { C2 c = new C2(); c.add(1, 2); } src\inheritance.d(16): function inheritance.C2.add (int) does not match parameter types (int,int) I dont use D for a long time, but i dont remember having problem like this? So anybody can help me: *Is there a problem on my code?Yes*Is it a desired limitation?Yes, this is how inheritance works in D.*Can i use another version of DMD to remove this problem?No.. ..but you can fix this by adding alias C1.add add; to your C2 class.Thanks a lot for your help. -bayo
Apr 26 2007
Jari-Matti Mäkelä a écrit :bayo kirjoitti:Realy hard to me to understand this limitation if we can "patch" it with an alias, but thanks a lot for your fast help, it run well :)Hello, i currently use DMD 1.013 for Windows and i cant compile this code class C1 { public void add(int i, int j) {} } class C2 : C1 { public void add(int i) {} } void main() { C2 c = new C2(); c.add(1, 2); } src\inheritance.d(16): function inheritance.C2.add (int) does not match parameter types (int,int) I dont use D for a long time, but i dont remember having problem like this? So anybody can help me: *Is there a problem on my code?Yes*Is it a desired limitation?Yes, this is how inheritance works in D.*Can i use another version of DMD to remove this problem?No.. ..but you can fix this by adding alias C1.add add; to your C2 class.Thanks a lot for your help. -bayo
Apr 26 2007
On Thu, 26 Apr 2007 20:21:04 +0200, bayo wrote:Jari-Matti Mäkelä a écrit :Well "limitation" may be a bit harsh. Inheritance is available but it is not as automatic as it is in some other languages. The need for the alias is because D's rules for finding matching functions is simple (some say simplistic). If it finds a matching name in the current context it doesn't try to look any further (e.g in the parent class). The 'alias' is the syntax needed to explicitly bring the parent's function's name into the current context. In your case above, because C2 contains the name 'add' your 'c.add(1,2)' stops looking further up the inheritance tree for a matching parameter signature. But by adding 'alias C1.add add', it includes all the 'add' functions in C1 into the namespace of C2. This is how Walter wants D to work so if you have suggested improvements, you have to convince him. (Good luck <G>) -- Derek Parnell Melbourne, Australia "Justice for David Hicks!" skype: derek.j.parnellbayo kirjoitti:Realy hard to me to understand this limitation if we can "patch" it with an alias, but thanks a lot for your fast help, it run well :)Hello, i currently use DMD 1.013 for Windows and i cant compile this code class C1 { public void add(int i, int j) {} } class C2 : C1 { public void add(int i) {} } void main() { C2 c = new C2(); c.add(1, 2); } src\inheritance.d(16): function inheritance.C2.add (int) does not match parameter types (int,int) I dont use D for a long time, but i dont remember having problem like this? So anybody can help me: *Is there a problem on my code?Yes*Is it a desired limitation?Yes, this is how inheritance works in D.*Can i use another version of DMD to remove this problem?No.. ..but you can fix this by adding alias C1.add add; to your C2 class.
Apr 26 2007
Derek Parnell napisał(a):On Thu, 26 Apr 2007 20:21:04 +0200, bayo wrote:<snip>Jari-Matti Mäkelä a écrit :bayo kirjoitti:Hello, i currently use DMD 1.013 for Windows and i cant compile this codeIt seems that this behavior is similar to way mixins work. I reported it as enhancement as current way has serious limitations. http://d.puremagic.com/issues/show_bug.cgi?id=1182 Regards Marcin Kuszczak (aarti_pl)Well "limitation" may be a bit harsh. Inheritance is available but it is not as automatic as it is in some other languages. The need for the alias is because D's rules for finding matching functions is simple (some say simplistic). If it finds a matching name in the current context it doesn't try to look any further (e.g in the parent class). The 'alias' is the syntax needed to explicitly bring the parent's function's name into the current context. In your case above, because C2 contains the name 'add' your 'c.add(1,2)' stops looking further up the inheritance tree for a matching parameter signature. But by adding 'alias C1.add add', it includes all the 'add' functions in C1 into the namespace of C2. This is how Walter wants D to work so if you have suggested improvements, you have to convince him. (Good luck <G>)Realy hard to me to understand this limitation if we can "patch" it with an alias, but thanks a lot for your fast help, it run well :)
Apr 27 2007
Well "limitation" may be a bit harsh. Inheritance is available but it is not as automatic as it is in some other languages. The need for the alias is because D's rules for finding matching functions is simple (some say simplistic). If it finds a matching name in the current context it doesn't try to look any further (e.g in the parent class). The 'alias' is the syntax needed to explicitly bring the parent's function's name into the current context. In your case above, because C2 contains the name 'add' your 'c.add(1,2)' stops looking further up the inheritance tree for a matching parameter signature. But by adding 'alias C1.add add', it includes all the 'add' functions in C1 into the namespace of C2. This is how Walter wants D to work so if you have suggested improvements, you have to convince him. (Good luck <G>)Perhaps the error can instead say something more useful like suggesting to alias instead.
Apr 30 2007