Я определил Cloneable интерфейса:Как клонировать несколько объектов наследования?
struct Cloneable
{
virtual Cloneable * clone(void) const = 0;
}
У меня есть также некоторые другие классы интерфейса (содержание не имеет отношения к выдаче):
struct Interface
{
};
struct Useful_Goodies
{
};
Я создал объект листа, который наследуется от вышеуказанных классов :
struct Leaf : public Cloneable, public Interface, public Useful_Goodies
{
Leaf * clone(void) const // Line #1 for discussion.
{
return new Leaf(*this);
}
};
Я получаю сообщение об ошибке:
overriding virtual function return type differs and is not covariant from 'Cloneable::clone'
Если изменить тип на Cloneable *
, я получаю сообщение об ошибке:
'return' : ambiguous conversions from 'Leaf *' to 'Cloneable *'
Мои вопросы (все связанные с):
- Как класс лист может решить требования из
Cloneable
интерфейс? - Есть ли лучшее решение для реализации договора о клонировании , где все объекты гарантируют реализацию клонирования?
Я использую эту парадигму как часть общего программирования (записи, поля &).
Компилятор: MS Visual Studio 2008; Платформы: Windows XP & Виста
Я использовал тот же компилятор, все прекрасно компилируется. Это была ошибка, разрешенная VC6 и далее. – DumbCoder
Что-то вы нам не рассказываете, потому что этот код компилируется для меня в VS 2008. –
Реальный вопрос, зачем вам клонировать объект. Я вижу много это из конверсий Java (где это большая проблема/концепция), но я еще не вижу необходимости в коде C++. Объяснение того, что вы на самом деле пытаетесь достичь, может дать вам некоторые полезные советы по методам C++, –