I presume your intent is to have B inherit the implementation from A. There are two options.

If you control class A and its appropriate to declare the interface there, you can declare that A implements I and have B simply inherit it from A.

class A : I {
   int f(int x) { return x; }
}

interface I { int f(int x); }

class B : A { }

void main() {
   writeln(new B().f(7));
}

If you only intend to introduce the interface on B, you still need to provide an implementation for I, either voluntarily overriding A or providing an alternate implementation to the virtual interface. To do the former, you can do the following:

class A {
   int f(int x) { return x; }
}

interface I { int f(int x); }

class B : A, I {
   override int f(int x) { return super.f(x); }
}

void main() {
   writeln(new B().f(7));
}




On Wednesday, 25 December 2013 at 07:40:03 UTC, Øivind wrote:
Why doesn't this work:

----

class A {
        int f(int x) {
                return x;
        }
}

interface I {
        int f(int x);
}

class B : A, I {
        
}

void main() {}

----

I get the following error with DMD 2.064.2:

/d122/f338.d(11): Error: class f338.B interface function 'int f(int x)' is not implemented

Reply via email to