Thread overview
Function is not implemented.
Nov 26, 2013
Agustin
Nov 26, 2013
Ali Çehreli
Nov 26, 2013
Agustin
Nov 26, 2013
Ali Çehreli
Nov 27, 2013
Jesse Phillips
November 26, 2013
I'm trying to move from Java to D, and i have some like this:

interface A
{
  public bool isCancelled();
  public void setCancelled(bool value);
}

class B
{
  public bool isCancelled();
  protected void setCancelled(bool value);
}

But when i do

class C : B, A
{}

I get

Engine/Main.d(6): Error: class Main.C interface function 'bool isCancelled()' is not implemented
Engine/Main.d(6): Error: class Main.C interface function 'void setCancelled(bool value)' is not implemented
November 26, 2013
On 11/26/2013 09:32 AM, Agustin wrote:
> I'm trying to move from Java to D, and i have some like this:
>
> interface A
> {
>    public bool isCancelled();
>    public void setCancelled(bool value);
> }
>
> class B
> {
>    public bool isCancelled();
>    protected void setCancelled(bool value);
> }
>
> But when i do
>
> class C : B, A
> {}
>
> I get
>
> Engine/Main.d(6): Error: class Main.C interface function 'bool
> isCancelled()' is not implemented
> Engine/Main.d(6): Error: class Main.C interface function 'void
> setCancelled(bool value)' is not implemented

You have to provide the implementations of the interface functions either in B or C. I think you actually tested with B implementations though:

class B
{
    public bool isCancelled()
    {
        // implemented
        return false;
    }

    protected void setCancelled(bool value)
    {
        // implemented
    }
}

Still the same error...

Unless you want to implement the functions on C as well, then C should not inherit from A. A is already inherited by B:

class C : B    // <-- no A
{}

Ali

November 26, 2013
On Tuesday, 26 November 2013 at 17:50:12 UTC, Ali Çehreli wrote:
> On 11/26/2013 09:32 AM, Agustin wrote:
>> I'm trying to move from Java to D, and i have some like this:
>>
>> interface A
>> {
>>   public bool isCancelled();
>>   public void setCancelled(bool value);
>> }
>>
>> class B
>> {
>>   public bool isCancelled();
>>   protected void setCancelled(bool value);
>> }
>>
>> But when i do
>>
>> class C : B, A
>> {}
>>
>> I get
>>
>> Engine/Main.d(6): Error: class Main.C interface function 'bool
>> isCancelled()' is not implemented
>> Engine/Main.d(6): Error: class Main.C interface function 'void
>> setCancelled(bool value)' is not implemented
>
> You have to provide the implementations of the interface functions either in B or C. I think you actually tested with B implementations though:
>
> class B
> {
>     public bool isCancelled()
>     {
>         // implemented
>         return false;
>     }
>
>     protected void setCancelled(bool value)
>     {
>         // implemented
>     }
> }
>
> Still the same error...
>
> Unless you want to implement the functions on C as well, then C should not inherit from A. A is already inherited by B:
>
> class C : B    // <-- no A
> {}
>
> Ali

Oh i forgot to add the implementation here, but its there, what i want to do is with an interface be able to change "protected" to "public", this is possible using Java but i don't know if possible using D.


class C : B, A -> setCancelled() is changed from protected to public
{
}


November 26, 2013
On 11/26/2013 09:52 AM, Agustin wrote:

> Oh i forgot to add the implementation here, but its there, what i want
> to do is with an interface be able to change "protected" to "public",
> this is possible using Java but i don't know if possible using D.
>
>
> class C : B, A -> setCancelled() is changed from protected to public
> {
> }
>
>

I don't know any other way than implementing in terms of B:

class C : B, A
{
    public override bool isCancelled()
    {
        return B.isCancelled();
    }

    protected override void setCancelled(bool value)
    {
        B.setCancelled(value);
    }
}

Ali

November 27, 2013
On Tuesday, 26 November 2013 at 17:52:28 UTC, Agustin wrote:
> Oh i forgot to add the implementation here, but its there, what i want to do is with an interface be able to change "protected" to "public", this is possible using Java but i don't know if possible using D.

Changing protection level like that seems very confusing.I'd expect a child to be able to expand visibility, not reduce it.