g++ : call of overloaded ... is ambiguous

Le
Arcturus
Bonjour,

Je dois utiliser un code C++ tiers, qui compile sous VC6, mais
que j'ai pour l'instant du mal à faire compiler sous g++ 3.4.2
sur windows2000.

g++ -c truc.cpp -o truc.o
error: call of overloaded is ambiguous
candidates are: bla bla

D'où ma question : est-ce qu'il y aurait des options de
compilation permettant d'éviter ce message d'erreur ?
Je crois que le code source C++ n'est pas parfait, mais je
préférerais ne pas y toucher, et plutôt employer un mode
de compilation "laxiste" si g++ le propose.

Merci de vos lumières ou pointeurs.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michael DOUBEZ
Le #304094
Bonjour,

Je dois utiliser un code C++ tiers, qui compile sous VC6, mais
que j'ai pour l'instant du mal à faire compiler sous g++ 3.4.2
sur windows2000.

g++ -c truc.cpp -o truc.o
error: call of overloaded ... is ambiguous
candidates are: bla bla

D'où ma question : est-ce qu'il y aurait des options de
compilation permettant d'éviter ce message d'erreur ?
Je crois que le code source C++ n'est pas parfait, mais je
préférerais ne pas y toucher, et plutôt employer un mode
de compilation "laxiste" si g++ le propose.


Si l'appel est ambigu, le compilateur ne pourra pas choisir. Ce n'est
pas juste un problème de typage et de correction ici.

Si tu donnes l'erreur en entier, on pourra voir pourquoi ça compile sur
un compilateur et pas sur un autre.

Michael

Sylvain
Le #304074
Arcturus wrote on 06/03/2007 13:22:
Bonjour,

Je dois utiliser un code C++ tiers, qui compile sous VC6, mais
que j'ai pour l'instant du mal à faire compiler sous g++ 3.4.2
sur windows2000.

g++ -c truc.cpp -o truc.o
error: call of overloaded ... is ambiguous
candidates are: bla bla

D'où ma question : est-ce qu'il y aurait des options de
compilation permettant d'éviter ce message d'erreur ?
Je crois que le code source C++ n'est pas parfait, mais je
préférerais ne pas y toucher, et plutôt employer un mode
de compilation "laxiste" si g++ le propose.


c'est une erreur (pas un warning), je doute donc qu'une option
quelconque lève l'ambiguïté ... sauf à masquer certaines résolutions /
coercions implicites ou recours à temporaire: VC98 est parfois assez peu
imaginatif pour les chemins qu'il pourrait utiliser et il peut donc ne
pas déceler certaines ambiguïtés.

Sylvain.

Arcturus
Le #304070

Si tu donnes l'erreur en entier, on pourra voir pourquoi ça compile sur
un compilateur et pas sur un autre.


ok. Je ne voulais pas balancer tout le code + message d'erreur.
J'essaie d'isoler la partie incriminée puis je reviens ici.

(PS: Que ça passe chez un compilo, et qu'il y ait des warnings chez
un autre, ça ne me choque pas. Mais que ça compile/compile pas selon
la crémerie ...)

James Kanze
Le #304066
On Mar 6, 3:02 pm, Arcturus
(PS: Que ça passe chez un compilo, et qu'il y ait des warnings chez
un autre, ça ne me choque pas. Mais que ça compile/compile pas selon
la crémerie ...)


Ça arrive souvent. En ce qui te concerne ici, ça arrive très
souvent dans la résolution du surcharge, qui a changé des les
détails sur le temps, et qui est assez subtile pour qu'on ne
soit pas toujours d'accord sur son interprétation, et que les
petites erreurs dans les implémentations soient fréquentes.

Dans le cas de VC++, les soucis de ne pas casser du code ancien
font qu'elle prend en compte aussi certaines fonctions que g++
écarte, et ne considère pas du tout. (En général, j'ai beaucoup
de compréhension pour ce genre d'écart. Dans ce cas précis, en
revanche, la règel a changé 1987 ou 1988. À une époque donc où
il y avait fort peu du code C++ existant, et pas de code VC++ du
tout.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Publicité
Poster une réponse
Anonyme