C ++ Weird Diamond Inheritance

I have it

    A
  /   \
 B     C
  \   /
    D

A has a pure virtual function prototyped as:

virtual A* clone(void) const = 0;

B and C are actually inherited from A ( class B: public virtual A, class C: public virtual A)

B has a virtual function prototyped as:

virtual B* clone(void) const {}; 

C has a virtual function prototyped as:

virtual C* clone(void) const {};

D inherits from both B and C: class D: public B, public C D has a virtual function prototyped as:

virtual D* clone(void) const {};

Now, when compiling, I get the following 6 lines of errors:

error C2250: 'D' : ambiguous inheritance of 'B *A::clone(void) const'

Lack of imagination how to solve this problem.

Thanks in advance.

+3
source share
3 answers

avoid diamond inheritance ?;

anyway, here is a sample (really a sample - don't throw it like that)

//ConsoleCppTest.cpp: . //

#include "stdafx.h"
#include "iostream"

class A {
public:
    virtual void* clone() = 0;
};

class B: public A {
public:
    virtual void* clone() = 0;
};

class C: public A {
    public:
    virtual void* clone() = 0;
};

class D: public B, public C
{
public:


    virtual void* B::clone() 
    {
        std::cout << "B";
        return (void*)this;
    }

    virtual void* C::clone()
    {
        std::cout << "C";
        return (void*)this;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{

    D* d = new D();

    void* b = ((B*)d)->clone();

    void* c = ((C*)d)->clone();

    return 0;
}
+1

, , .

class B : public virtual A

Edit:
MSV++ 2010 . Intellisense , . , VC6 .

, D , MSV++ 2010 , :

class D: public virtual A, public B, public C
+9

, , . , , Comeau Online

class A {
public: virtual A* clone() const = 0;
};

class B: public virtual A {
public: virtual B* clone() const { return 0; }
};

class C: public virtual A {
public: virtual C* clone() const { return 0; }
};

class D: public B, public C
{
public: virtual D* clone() const { return 0; }
};

, , , . , .

P.S. VS 2010 Express . Gunslinger47, VS 2010.

+5
source

Source: https://habr.com/ru/post/1762096/


All Articles