C++ multiple inheritance function call ambiguity
I have a basic question related to multiple inheritance in C++. If I have a code as shown below:
struct base1 {
void start() { cout << "Inside base1"; }
};
struct base2 {
void start() { cout << "Inside base2"; }
};
struct derived : base1, base2 { };
int main() {
derived a;
a.start();
}
which gives the following compilation error:
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'
Is there no way to be able to call function start()
from a specific base class using a derived class object?
I don't know the use-case right now but.. still!
a.base1::start();
a.base2::start();
or if you want to use one specifically
class derived:public base1,public base2
{
public:
using base1::start;
};
Sure!
a.base1::start();
or
a.base2::start();
In addition to the answers above, if we are in the case of NON-VIRTUAL inheritance:
you can:
- use
static_cast<base1*>(a).start()
or
- override start() in derived
Btw - please note the diamond problem that can appear. In this case you might want to use virtual.