Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
accès ambigu de 'member'
Remarques
Un membre est hérité de plusieurs types de base, ce qui rend l’accès non qualifié à ce membre ambigu. Pour corriger cette erreur :
- Qualifiez explicitement l’accès au membre.
- Cassez l’objet dans la classe de base contenant le membre avant d’accéder au membre.
- Renommez le membre ambigu dans la classe de base.
- Placer le membre dans l’étendue.
Exemple
L’exemple suivant génère l’erreur 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
}
Vous pouvez résoudre les appels ambigus en func1 apportant les deux surcharges dans l’étendue. Toutefois, cela ne fonctionne pas car func2A::func2 et B::func2 ne prend pas d’arguments, de sorte qu’ils ne peuvent pas être différenciés par leurs paramètres. Vous pouvez résoudre le problème en :
- Présentation de celle que vous souhaitez utiliser dans l’étendue
- Qualifier explicitement l’appel avec le type de base
- Castez l’objet avant d’appeler la fonction.