Многозначность вызова функции множественного наследования в C ++ - PullRequest
38 голосов
/ 27 июля 2011

У меня есть основной вопрос, связанный с множественным наследованием в C ++.Если у меня есть код, показанный ниже:

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

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

struct derived : base1, base2 { };

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

, который выдает следующую ошибку компиляции:

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'

Нет ли способа вызвать функцию start() из определенногобазовый класс, использующий объект производного класса?

Я сейчас не знаю сценарий использования, но ... все же!

Ответы [ 2 ]

77 голосов
/ 27 июля 2011
a.base1::start();

a.base2::start();

или если вы хотите использовать один

class derived:public base1,public base2
{
public:
    using base1::start;
};
4 голосов
/ 27 июля 2011

Конечно!

a.base1::start();

или

a.base2::start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...