Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
February 15, 2015 shared interfaces | ||||
---|---|---|---|---|
| ||||
interface IA { void fnA(); } interface IB { void fnB(); } shared interface IC : IA, IB { void fnC(); } shared class C : IA, IB { override void fnA() // Error: function main.C.fnA does not override any function, did you mean to override 'main.IA.fnA'? { } override void fnB() // Error: function main.C.fnB does not override any function, did you mean to override 'main.IA.fnA'? { } shared class D : IC { override void fnC() { } override void fnA() // Error: function main.D.fnA does not override any function, did you mean to override 'main.IA.fnA'? { } override void fnB() // Error: function main.D.fnB does not override any function, did you mean to override 'main.IB.fnB'? { } } what is wrong in declarations, if I need to declare shared classes D and C? |
February 15, 2015 Re: shared interfaces | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey Derzhavin | On Sunday, 15 February 2015 at 10:43:46 UTC, Andrey Derzhavin wrote:
> what is wrong in declarations, if I need to declare shared classes D and C?
`shared` on a class/interface makes all members shared. And that's all it does.
So this:
----
interface IA
{
void fnA();
}
shared class C : IA
{
override void fnA() {}
}
----
is the same as this:
----
interface IA
{
void fnA();
}
class C : IA
{
override void fnA() shared {}
}
----
But you can't override a non-shared method with a shared one, hence the error.
So, if you need to override non-shared methods, you can't mark the whole class shared. Instead, you have to mark the shared members individually. Like so:
----
interface IA
{
void fnA();
}
shared interface IC : IA
{
void fnC();
}
class D : IC
{
override void fnC() shared {}
override void fnA() {}
}
----
|
February 15, 2015 Re: shared interfaces | ||||
---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Sunday, 15 February 2015 at 11:30:46 UTC, anonymous wrote:
> On Sunday, 15 February 2015 at 10:43:46 UTC, Andrey Derzhavin wrote:
>> what is wrong in declarations, if I need to declare shared classes D and C?
>
> `shared` on a class/interface makes all members shared. And that's all it does.
>
> So this:
>
> ----
> interface IA
> {
> void fnA();
> }
> shared class C : IA
> {
> override void fnA() {}
> }
> ----
>
> is the same as this:
>
> ----
>
> interface IA
> {
> void fnA();
> }
> class C : IA
> {
> override void fnA() shared {}
> }
> ----
>
> But you can't override a non-shared method with a shared one, hence the error.
>
> So, if you need to override non-shared methods, you can't mark the whole class shared. Instead, you have to mark the shared members individually. Like so:
>
> ----
> interface IA
> {
> void fnA();
> }
> shared interface IC : IA
> {
> void fnC();
> }
> class D : IC
> {
> override void fnC() shared {}
> override void fnA() {}
> }
> ----
Try to compile your example, it is wrong.
|
February 15, 2015 Re: shared interfaces | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey Derzhavin | On Sunday, 15 February 2015 at 12:34:50 UTC, Andrey Derzhavin wrote: > On Sunday, 15 February 2015 at 11:30:46 UTC, anonymous wrote: [...] >> ---- >> interface IA >> { >> void fnA(); >> } >> shared interface IC : IA >> { >> void fnC(); >> } >> class D : IC >> { >> override void fnC() shared {} >> override void fnA() {} >> } >> ---- > Try to compile your example, it is wrong. Hm? Works for me. What error do you get, or what doesn't work? Which compiler are you using, which version? |
February 15, 2015 Re: shared interfaces | ||||
---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Sunday, 15 February 2015 at 14:59:20 UTC, anonymous wrote:
> Hm? Works for me. What error do you get, or what doesn't work? Which compiler are you using, which version?
The error "Error: function main.C.fnA does not
override any function, did you mean to override 'main.IA.fnA'?" has occured ((
I'm using DMD 2.066.1 compiler.
|
Copyright © 1999-2021 by the D Language Foundation