Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1229 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Erreur d'accès ambigu à une fonction membre après dérivation multiple

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur d'accès ambigu à une fonction membre après dérivation multiple

n°1536138
papangue
Posté le 29-03-2007 à 22:51:41  profilanswer
 

Salut à tous.
 
Soit le code suivant:
 

Code :
  1. struct A
  2. {
  3.       void x(int i)
  4.       {
  5.             printf("\nIn A::x" );
  6.       }
  7. };
  8. struct B
  9. {
  10.       void x(char c)
  11.       {
  12.             printf("\nIn B::x" );
  13.       }
  14. };
  15. struct C : A, B
  16. {
  17. // uncomment the following two lines to resolve this C2385
  18. // using B::x;
  19. // using A::x;
  20. };
  21. int main()
  22. {
  23. C toto;
  24. toto.x(100); // ==> Génère une erreur
  25. toto.x('c'); // ==> Génère une erreur
  26. }


 
La question est simple: VC++ génère une erreur à la compilation car il ne semble pas etre capable de déterminer quelle fonction x il doit exécuter; mon soucis est que la signature des fonctions n'est pas la même puisque dans un casla fonction x parend comme argument un char et dans l'autre c'est un int. Si c'était simplement de la surcharge de fonction ça marcherait sans aucun problème il me semble.
Serait-ce possible que ce soit un probleme de scope puisque l'utilisation des using permet de faire sauter cette ambiguité.
Quelqu'un peut-il m'en dire un peu plus sur le sujet? Sa'git-il d'un comportement que l'on retrouve sur d'autre compilateurs ou est-ce une particularité de VC++?
 
Merci par avance pour vos réflexions sur le sujet.


Message édité par papangue le 29-03-2007 à 22:52:23
mood
Publicité
Posté le 29-03-2007 à 22:51:41  profilanswer
 

n°1536160
++fab
victime du syndrome IH
Posté le 29-03-2007 à 23:53:12  profilanswer
 

Citation :

Serait-ce possible que ce soit un probleme de scope puisque l'utilisation des using permet de faire sauter cette ambiguité.


si au réultat du "name lookup", il y a des noms identiques ne provenant pas de la même base, il y a alors ambiguité et le programme n'est pas valide.

 
Citation :

S'agit-il d'un comportement que l'on retrouve sur d'autre compilateurs ou est-ce une particularité de VC++?


VC++ applique ce que le standard dicte, et les autres compilateurs doivent faire de même.

 

Message cité 1 fois
Message édité par ++fab le 30-03-2007 à 00:19:18
n°1536240
papangue
Posté le 30-03-2007 à 09:52:06  profilanswer
 

++fab a écrit :

Citation :

Serait-ce possible que ce soit un probleme de scope puisque l'utilisation des using permet de faire sauter cette ambiguité.

 
si au réultat du "name lookup", il y a des noms identiques ne provenant pas de la même base, il y a alors ambiguité et le programme n'est pas valide.
 

Citation :

S'agit-il d'un comportement que l'on retrouve sur d'autre compilateurs ou est-ce une particularité de VC++?


VC++ applique ce que le standard dicte, et les autres compilateurs doivent faire de même.


 
Sauf que la signature n'est pas la même:
dans un cas on a une fonction de type x(int) et dans l'autre c'est du x(char).
Donc pour moi l'ambiguité devrait être automatiquement levée - c'est la cas lors de la surcharge d'une fonction il me semble.

n°1536293
++fab
victime du syndrome IH
Posté le 30-03-2007 à 10:55:05  profilanswer
 

papangue a écrit :

Sauf que la signature n'est pas la même:
dans un cas on a une fonction de type x(int) et dans l'autre c'est du x(char).


Cela n'a pas d'importance, seul le nom compte.
 

Citation :

Donc pour moi l'ambiguité devrait être automatiquement levée

 
Non. Imagine une classe héritant de A et de B, A provenant du vendeur EntrepriseA et B provenant de EntrepriseB.
EntrepriseA et EntrepriseB ne se connaisse pas. A chaque mise à jour des bibliothèques, tu peux imaginer les problèmes qui se poserait si C++ ne procédait pas ainsi ...

n°1536573
papangue
Posté le 30-03-2007 à 20:13:37  profilanswer
 

en effet de ce point de vu c'est compréhensible


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Erreur d'accès ambigu à une fonction membre après dérivation multiple

 

Sujets relatifs
comment utiliser cette fonctioninclusion multiple
Erreur phpFonction pour écrire un DWORD dans la base de registre avec VB6
Problemme sur fonction [debutant]petit problème pour transfert de valeurs dans liste à choix multiple
fonction setIntervalfonction changer nom fichier
[PHP] Fonction include dreamweaver 
Plus de sujets relatifs à : Erreur d'accès ambigu à une fonction membre après dérivation multiple


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR