Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
acesso ambíguo do «membro»
Observações
Um membro é herdado de mais de um tipo de base, tornando o acesso não qualificado a esse membro ambíguo. Para resolver este erro:
- Qualificar explicitamente o acesso ao membro.
- Converta o objeto para a classe base que contém o membro antes de acessar o membro.
- Renomeie o membro ambíguo na classe base.
- Coloque o membro no escopo.
Example
O exemplo a seguir gera 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
}
Você pode resolver as chamadas ambíguas trazendo func1 ambas as sobrecargas para o escopo. No entanto, isso não funciona porque func2A::func2 e B::func2 não aceita argumentos, então chamá-los não pode ser diferenciado por seus parâmetros. Você pode resolver o problema da seguinte forma:
- Introduza o que você deseja usar no escopo
- Qualificar explicitamente a chamada com o tipo base
- Projete o objeto antes de chamar a função.