[VS.NET] Une erreur de compilation incroyable!

cs_Sunsawe Messages postés 64 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 5 avril 2007 - 16 juil. 2005 à 11:19
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 16 juil. 2005 à 13:46
Bonjour,

excusez moi mais je ne savais pas comment titrer mon message autrement.

Voilà là fameuse erreur qui se suffit à elle même:



<chemin>Mesfunc.cpp(72) : error C2665:
'afficheInfo' : none of the 2 overloads can convert parameter 2 from
type 'std::ostream'

<chemin>Mesfunc.h(14):
could be 'MaClasse *afficheInfo(MaClasse *,std::ostream)'

<chemin>Mesfunc.h(15):
or 'MaClasse *afficheInfo(const
char *,std::ostream)'

while trying to match the argument list '(MaClasse *, std::ostream)'



Alors je ne sais pas si vous voyez le truc, mais il ne veut pas
compiler parce qu'il ne peut pas convertir un std:ostream
en...std::ostream!!!!!!!!!!!!!!!



Alors là j'ai vraiment besoin qu'on m'explique!!

Merci

6 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 juil. 2005 à 12:35
salut,

il manque des informations !!

copie-colle ici tout ton fichier .h

quel est le type du premier parametre quand tu appelles afficheInfo à la ligne 72 de ton fichier mesfunc.cpp ??

copie colle tout l'appel.



a+
0
cs_Sunsawe Messages postés 64 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 5 avril 2007
16 juil. 2005 à 12:48
Oui je vois ce que tu veux dire mais non.

Regarde bien le texte de l'erreur!!

Il te dit ne pas pouvoir transtyper le deuxième paramètre depuis 'std::ostream' que les appels possibles sont ceux ci : 'MaClasse *afficheInfo(MaClasse *,std::ostream)' et 'MaClasse *afficheInfo(const char *,std::ostream)' alors que j'essai de faire appel avec ça: '(MaClasse *, std::ostream)'.

Voilà texto ce que l'erreur dit donc le compilo te dit lui même que mes arguments sont corrects!



Moi voilà tout de même la ligne 72 qui n'est pas un appel c'est le corps de la surcharge de la fonction.

MaClasse * afficheInfo(const char * sonsi,ostream sor)

{

MaClasse *mavar=NULL;

mavar=new MaClasse(sonsi);

afficheInfo( mavar,sor); //ligne 72

return mavar;

}



Ce qui est le plus hallucinant c'est que sous vc6 ça compile et execute
sans pro. Vraiment j'aimerai bien savoir où est mon erreur.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 juil. 2005 à 13:04
l'erreur peut parait ambigue, c'est pour ca que je pense que c'est
mieux si tu copies-colle ici tout ton .h. A priori, si un des deux
compilateurs est buggé, c'est plus vc6 que vs7.

la a mon avis, pb avec les espaces de nommages...

dans ton .h tu ne doit pas avoir de using namespace std; et avoir

'MaClasse *afficheInfo(MaClasse *,std::ostream)' comme prototype.

dans ton .cpp, essaie de surchager avec std:: ou sans, d'enlever le using namespace std;



enfin bon, si ton but c'est pas de résoudre ton pb, mais de dire regardez c'est mysterieux ...

-> montre ta source !!!!!
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 juil. 2005 à 13:14
ha ben moi j'ai trouvé d'ou vient ton pb ;)

(qui n'aurait pas été trouvé sans le corps de ta fonctions).



le type ostream ne possede pas de constructeur de copie.

change le prototype de tes deux fonctions, et mets un passage par reference !!

MaClasse * afficheInfo(const char * sonsi,ostream& sor);

MaClasse * afficheInfo(MaClasse * sonsi,ostream& sor)



moi j'ai re obtenu ton erreur, et la suite du message m'a été utile:



error C2664: 'test' : impossible de convertir le paramètre 2 de 'std::ostream' en 'std::ostream'

Aucun constructeur de copie
n'est disponible pour class 'std::basic_ostream<_Elem,_Traits>'
ou le constructeur essaie d'exécuter une conversion non conforme en
référence non-__gc

with

[

_Elem=char,

_Traits=std::char_traits<char>

]



a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Sunsawe Messages postés 64 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 5 avril 2007
16 juil. 2005 à 13:37
Pourquoi moi j'ai pas la suite du message? il m'aime pas ou quoi?

Enfin bon apparement ça semble venir de là.

Mais pourquoi sous vc6 ça compile et ça marche?

vc7 est plus strict? mais là c'est même pas l'histoire si y'a pas de
constructeur par copie, ça ne devrait pas marcher quelque soit le
compilateur non?
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 juil. 2005 à 13:46
-> vc6 est vraiment buggé.

Peut etre qu'il implemente une version de ostream qui possede un constructeur de copie, mais j'en doute.

A retenir : pour convertir un type en un autre (meme si ce sont les
memes), il faut un constructeur de copie ou un operateur d'affectation.



a+
0