Вы настраиваете какую-то связь между Base1 и Base2, чтобы они не могли быть получены из обоих.
Вы можете сделать так, чтобы они оба были производными от Base0; в этом случае, если вы производите от Base1 и Base2, вы получите алмаз множественного наследования, так что вы получите ошибку компилятора, если вы не используете виртуальное наследование и не решаетеДублирование.
Это может решить вашу проблему, но я спрашиваю, почему вы пытаетесь это сделать.
(Base0 не должен быть полностью пустым классом, потому что должно быть что-то неоднозначное, чтобы вызватькомпилятор, чтобы жаловаться. И, конечно, вы могли бы разрешить его, чтобы он полностью не помешал вам наследовать оба, просто он сгенерирует требуемую «ошибку» компилятора, если вы сделаете это по ошибке).
Anпример может быть:
class Base0
{
protected:
virtual ~Base0(){};
virtual void abstractMethod() const = 0;
};
class Base1 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Base2 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Derived : public Base1, public Base2
{
// if I don't resolve abstractMethod it is ambiguous and the compiler will let me know
};