Classe derivada implementando várias interfaces com uma assinatura de função comum

Estou recebendo um erro de compilação quando tento compilar meu código. O erro é este:

multi.cc: In function ‘int main()’:
multi.cc:35: error: cannot declare variable ‘mdc’ to be of abstract type ‘MostDerivedClass’
multi.cc:27: note:   because the following virtual functions are pure within ‘MostDerivedClass’:
multi.cc:13: note:  virtual int Interface2::common_func()
multi.cc:36: error: request for member ‘common_func’ is ambiguous
multi.cc:13: error: candidates are: virtual int Interface2::common_func()
multi.cc:21: error:                 virtual int InterimClass::common_func()

E aqui está o meu código:

class Interface1 {
public:
    virtual int common_func() = 0;
    virtual ~Interface1() {};
};

class Interface2 {
public:
    virtual int common_func() = 0;
    virtual int new_func() = 0;
    virtual ~Interface2() {};
};


class InterimClass : public Interface1 {
public:
    virtual int common_func() {
        return 10;
    }
};


class MostDerivedClass : public InterimClass, public Interface2 {
public:
    virtual int new_func() {
        return 20;
    }   
};

int main() {
    MostDerivedClass mdc;
    int x = mdc.common_func();
    cout << "The value = " << x << endl;    

    Interface2 &subset_of_funcs = dynamic_cast<Interface2 &>(mdc);
    x = subset_of_funcs.common_func();
}

Minhas perguntas:

Como eu digo ao compilador que common_func () já está implementado pelo InterimClass, que é uma classe base de MostDerivedClass?

Existe outra maneira de resolver meu problema? O que eu realmente gostaria de fazer é poder também chamar o common_func de Interface2. Eu estou trabalhando com algum código legado com uma enorme quantidade de métodos na Interface1. No meu novo código, eu só quero chamar um pequeno conjunto dessas funções Interface1, além de algumas que eu preciso adicionar.

questionAnswers(4)

yourAnswerToTheQuestion