Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
неоднозначный доступ к "члену"
Замечания
Элемент наследуется от нескольких базовых типов, что делает неспровоцированное доступ к такому члену неоднозначным. Устранение ошибки
- Явным образом квалифицировать доступ к члену.
- Приведение объекта к базовому классу, содержащего элемент перед доступом к элементу.
- Переименуйте неоднозначный член в базовом классе.
- Доведите элемент в область действия.
Пример
В следующем примере создается 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
}
Вы можете устранить неоднозначные вызовы func1 , приведя обе перегрузки в область. Однако это не работает func2 , так как A::func2 и B::func2 не принимает аргументы, поэтому их вызов не может быть дифференцирован их параметрами. Вы можете устранить проблему, выполнив следующие действия.
- Знакомство с тем, который вы хотите использовать в области
- Явно квалифицировать вызов с базовым типом
- Приведение объекта перед вызовом функции.