Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ambiguous access of 'member'
A member is inherited from more than one base type, making unqualified access to that member ambiguous. To resolve this error:
- Explicitly qualify access to the member.
- Cast the object to the base class containing the member before accessing the member.
- Rename the ambiguous member in the base class.
- Bring the member into scope.
Example
The following sample generates C2385:
// C2385.cpp
struct A
{
void func1(int i) {}
void func2() {}
};
struct B
{
void func1(char c) {}
void func2() {}
};
struct C : A, B
{
// Uncomment the following lines to resolve the first 2 errors
// The error below for the call to c.func2() will remain
// using A::func1;
// using B::func1;
};
int main()
{
C c;
c.func1(123); // C2385
c.func1('a'); // C2385
c.func2(); // C2385
c.A::func2(); // OK because explicitly qualified
c.B::func2(); // OK because explicitly qualified
static_cast<A>(c).func2(); // OK because of the cast
static_cast<B>(c).func2(); // OK because of the cast
}
You can resolve the ambiguous calls to func1
by bringing both overloads into scope. However, this doesn't work for func2
because A::func2
and B::func2
don't take arguments, so calling them can't be differentiated by their parameters. You can resolve the issue by:
- Introduce the one you want to use into scope
- Explicitly qualify the call with the base type
- Cast the object before calling the function.