Bu örnekteki polimorfizm uygulamasıyla bazı sıkıntılarım var.C++, 2010 yılında belirsiz kalıtım hatası
class A
{
public:
virtual A * copy() const = 0;
virtual ~A() = 0;
};
A::~A(){}
class B
{
public:
virtual B * copy() const = 0;
virtual ~B() = 0;
};
B::~B(){}
class C: virtual public A , public B
{
public:
virtual C * copy() const = 0;
virtual ~C() = 0;
};
C::~C(){}
ve iki kalıtsal sınıfları
class D: virtual public A
{
public:
virtual D * copy() const {return new D (*this);}
virtual ~D() {}
};
class E: virtual public D , public C
{
public:
virtual E * copy() const {return new E (*this);}
virtual ~E() {}
}; //Error C2250: 'E' : ambiguous inheritance of 'D *A::copy(void) const
yukarıda belirtilen hata oluşur sanal devralma kullanarak: Bu soru 3 soyut sınıflar vardır
C++, virtual inheritance, strange abstract class + clone problem
benim son soruya benzer Sadece MSVS 2010 derleyicisini kullanarak, g ++ bu kodu derler. (Basitleştirilmiş)
Sınıf diyagramı biz sonuçla kapatmak
.......... A .... B.....
........../.\..../......
........./...\../.......
......../.....\/........
.......D...... C........
........\...../.........
.........\.../..........
..........\./...........
...........E............
Son tartışma:
class C: virtual public A , public B
{
public:
//virtual C * copy() const = 0; //remove declaration
virtual ~C() = 0;
};
C::~C(){}
Benim örnek kod polimorfizmi ihtiyaçlarını kullanarak sınıf C'den kopya() metodunun beyanı kaldırmak C işaretçilerinin vektörünü oluşturmak için
int main(int argc, char* argv[])
{
std::vector <C*> items;
items.push_back(new E());
items.push_back(new E());
items[0]->copy();
return 0;
}
beni nasıl kodunu 2010 VS kullanarak çevrilebilir olması düzeltmek için yardım eder misiniz?
Favori C++ kitabınızda, SSS'de veya başvuru sitenizde 'sanal' devralmaya bakın. Ayrıca "C++ korkulu elmas mirası" için web'de arama yapın. –
Bu problemi biliyorum ... Ama bu benim sorum ile nasıl bağlantılı? Bu kod doğru, ancak MSVS 2010 ancak derlemek değil g ++ ant oher derleyiciler evet ... – Johnas