Covariant problem
Steven Schveighoffer
schveiguy at yahoo.com
Wed Jul 23 10:43:23 PDT 2008
"Zarathustra" wrote
> Steven Schveighoffer Wrote:
>
>> "Zarathustra" wrote
>> > error:
>> > function basis.CPolygon2d.getPoints of type CPoint2d[]() overrides but
>> > is
>> > not covariant with basis.CPolygon3d.getPoints of type CPoint3d[]()
>> >
>> > I don't know how to fix this problem. What does 'covariant' mean?
>>
>> Covariant means that the override returns something that can be
>> implicitly
>> casted to the base version.
>>
>> So the error looks like the base class function getPoints returns type
>> CPoint3d[], but the derived class is returning CPoint2d[]. In order for
>> this to work, CPoint2d[] must be implicitly castable to CPoint3d[], which
>> probably isn't true.
>>
>> In order to diagnose the problem exactly, we would have to see code. At
>> least the class hierarchy.
>>
>> -Steve
>>
>>
>
> Ok, thanks. I understand it now.
> CPoint2d class is inherited by CPoint3d. Both classes have same named
> functions with this difference that one return CPoint2d object and second
> CPoin3d object. Is possible to extort to call correct function (not from
> parent class). It's strange, because CPoint2d can be casted to CPoint3d
> but not inversely.
I'm not quite sure how to interpret your statement. It might be better to
understand by showing some stub code.
Fill in where you see ???:
class CPoint2d : ???
{
}
class CPoint3d : ???
{
}
class CPolygon2d : ???
{
???[] getPoints() {}
}
class CPolygon3d : ???
{
???[] getPoints() {}
}
-Steve
More information about the Digitalmars-d-learn
mailing list