Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
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.

4 réponses

Avatar
Michael DOUBEZ
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

Avatar
Sylvain
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.

Avatar
Arcturus

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 ...)

Avatar
James Kanze
On Mar 6, 3:02 pm, Arcturus wrote:

(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