web-dev-qa-db-ja.com

C ++多重継承関数呼び出しのあいまいさ

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()を呼び出すことができる方法はありませんか?

今のところユースケースはわかりませんが、それでも!

40
goldenmean
a.base1::start();

a.base2::start();

または、具体的に使用したい場合

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

承知しました!

a.base1::start();

または

a.base2::start();