Define an interface that has a function that returns an object of the same type:
interface I
{
I foo();
}
Now define a class that inherits that interface:
class M : I
{
this(int i)
{
this.i = i;
}
M foo()
{
return new M(42);
}
int i;
}
Given this example, the following main function fails to compile:
void main()
{
M m = new M(3);
M c = m.foo();
import std.stdio;
writeln(c.i);
}
The error message is the following:
Error: need `this` for `foo` of type `M()`
Why does this happen and how to fix it?