web-dev-qa-db-fra.com

Ambiguïté d'appels de fonction d'héritage multiple C ++

J'ai une question de base liée à l'héritage multiple en C++. Si j'ai un code comme indiqué ci-dessous:

struct base1 {
   void start() { cout << "Inside base1"; }
};

struct base2 {
   void start() { cout << "Inside base2"; }
};

struct derived : base1, base2 { };

int main() {
  derived a;
  a.start();
}

ce qui donne l'erreur de compilation suivante:

1>c:\mytest.cpp(41): error C2385: ambiguous access of 'start'
1>      could be the 'start' in base 'base1'
1>      or could be the 'start' in base 'base2'

N'existe-t-il aucun moyen d'appeler la fonction start() à partir d'une classe de base spécifique à l'aide d'un objet classe dérivé?

Je ne connais pas le cas d'utilisation en ce moment mais .. quand même!

40
goldenmean
a.base1::start();

a.base2::start();

ou si vous souhaitez en utiliser un spécifiquement

class derived:public base1,public base2
{
public:
    using base1::start;
};
81
dascandy

Sûr!

a.base1::start();

ou

a.base2::start();
4