error: no matching function for call to... [C++][resolu] - C++ - Programmation
Marsh Posté le 10-11-2008 à 12:02:13
durk a écrit : [...]
[...] |
Marsh Posté le 10-11-2008 à 12:06:53
^^ merci, mais en fait cette faute vient du fait que j'ai retappé en partie mon code.
Sur l'orignale elle y est pas (j'espere que je l'aurais vu sinon etant donné le nombre d'error auquel j'aurais eu droit ).
J'edit ca.
Pour mieu comprendre, quand je retire l'appel releve_mensuel(date) du code, je n'ai plus aucune erreur et le tout compile...
Marsh Posté le 10-11-2008 à 12:26:26
Ta méthode travaille sur des objets const, elle doit donc être déclarée const
Code :
|
Marsh Posté le 10-11-2008 à 12:49:47
Merci aussi Taz
Bah en fait j'ai besoin d'une date pour pouvoir travailler dessus. Mais que je lui passe un pointeur ou bien une
date (passage par copie ce qui ne me change rien), le compilo fait comme si je lui passait une reference dans
une fonction const.
Ce qui n'est pas le cas en pratique, je lui passe un pointeur sur une fonction declarée non constante...
Marsh Posté le 10-11-2008 à 13:44:07
La classe "CompteEnBanque" ne contient pas de méthode "releve_mensuel".
Marsh Posté le 10-11-2008 à 13:50:59
Sisi elle en contient bien une..
J'ai posté dans mon premier message le CompteEnBanque.h avec le prototype pour montrer
qu'elle etait bien dedans.. Sinon l'erreur aurait ete differente..
Un appercu de la methode est donnée dans ma reponse à Joel..
Marsh Posté le 10-11-2008 à 13:58:24
Non, ce que tu as posté c'est le prototype d'une fonction dans un .h, nul part on y voit la définition d'une méthode 'releve_mensuel' pour une classe 'CompteEnBanque'.
Tu n'as pas mis la définition de la classe, et par conséquent on ne peut déduire du message d'erreur que le fait que la classe ne contient pas une telle méthode.
Mets donc la définition de ta classe, qu'on y jette un oeil, mais je reste pour le moment sur mon diagnostic.
Marsh Posté le 10-11-2008 à 14:03:33
C'est la définition de la classe que je souhaite examiner.
Marsh Posté le 10-11-2008 à 14:13:02
heu... desolé mais jcomprends pas ce que tu veux exactement...
les entetes?
Citation : |
Citation : |
ou c'est autre chose?
Marsh Posté le 10-11-2008 à 14:14:52
Code :
|
Je voudrais voir "contenu".
Marsh Posté le 10-11-2008 à 14:16:36
soit:
Code :
|
Marsh Posté le 10-11-2008 à 14:25:29
C'est donc bien ça.
Tu as dans CompteEnBanque une méthode :
std::string releve_mensuel(Date * date);
Or ce que recherche le compilateur, c'est :
std::string releve_mensuel(Date * & date) const;
Méthode qui n'existe pas dans ta classe.
Marsh Posté le 10-11-2008 à 15:44:12
Pourquoi tu utilises un const_iterator et pas un iterator tout bête ?
Marsh Posté le 10-11-2008 à 15:55:54
j'ai vu ca sur un tuto , j'ai pas cherché plus loin ^^.
jvais tester si ca change quelque chose sans.
Merci pour la remarque.
Marsh Posté le 10-11-2008 à 17:22:18
un const iterator ca renvoit des iterator vers des objets const et donc ta methode doit etre cosnt.
La constitude des méthodes c'est pas à prendre à la légére
Marsh Posté le 10-11-2008 à 18:16:01
Wé c'etait ca!!!!
Franchement, passer deux jours sur ca, jsuis defait!!
Merci à tous!
Marsh Posté le 10-11-2008 à 19:52:02
durk a écrit : j'ai vu ca sur un tuto , j'ai pas cherché plus loin ^^. |
En ce cas je te suggère plutôt de te renseigner sur ce site : http://cplusplus.com
Il y a là un bref cours de C++, et toutes les méthodes de la STL décrites avec des snippets d'exemple. Personnellement, je n'ai pas trouvé de site plus synthétique et pratique à utiliser.
Marsh Posté le 16-01-2009 à 04:16:39
Elmoricq a écrit : C'est donc bien ça. |
comment ça ?
c'est ce qu'il nous a expliqué au début
l'erreur lui dit qu'il tente d'appeler : std::string releve_mensuel(Date * & date) const;
qui n'existe pas
et lui propose d'essayer : std::string releve_mensuel(Date * date);
durk a écrit : |
donc l'erreur ne venait pas de là puisqu'il appelle correctement la méthode...
_______________________________________________
J'ai un problème similaire !
une fonction d'affichage :
Code :
|
erreur :
Code :
|
c'est exactement ce que je fais
c'est le const qui fout sa merde, pourquoi ?
Marsh Posté le 16-01-2009 à 10:08:22
const ne fout pas sa merde, c'ets quoi qui ne type pas correctement tes objets et tes méthodes.
Ta méthode print est const, elle ne peut donc pas modifier l'instance appelante. Dans print, tout tes membres sont const. Or iterator<T> attend une objet non-const car il doit pouvoir modifier son contenu. liste_fils étant const, ca ne passe pas. Il faut utiliser const_iterator.
Marsh Posté le 10-11-2008 à 11:57:57
Salut à tous, c'est encore moi..
Voila j'ai cette erreur dont j'arrive pas à identifier la source depuis hier:
Banque.cpp: In member function ‘std::string Banque::historiqueMensuel(Date*)’:
Banque.cpp:87: error: no matching function for call to ‘CompteEnBanque::releve_mensuel(Date*& ) const’
CompteEnBanque.h:49: note: candidates are: std::string CompteEnBanque::releve_mensuel(Date*) <near match>
make: *** [Banque.o] Error 1
Dans le banque.h
[...]
#include "CompteEnBanque.h"
public: std::string historiqueMensuel(Date * date);
[...]
Dans le Banque.cpp
[...]
std::string Banque::historiqueMensuel(Date * date){
std::list<CompteEnBanque>::const_iterator lit=listeComptes.begin();
std::ostringstream s;
while(lit!=listeComptes.end()){
s<<" Total: "<<std::endl<<lit->releve_mensuel(date)<<std::endl; //PROBLEME ICI
lit++;
}
return s.str();
}
[...]
Dans Le CompteEnBanque.h
[...]
#include"Date.h"
std::string releve_mensuel(Date * date);
[...]
CompteEnBanque.cpp
std::string CompteEnBanque::releve_mensuel(Date * date){
std::list<Operation>::const_iterator lit=historique.begin();
std::ostringstream s;
monthTrans=0;
while(lit!=historique.end()){
[...]
monthTrans+=lit->getMontant();
lit++;
}
return s.str();
}
Je ne comprend pas pourquoi, alors que l'appel de fonction est bon, avec les bons types en arguments, le compilateur
fais comme si j'appelais une fonction const avec un argument de type Date*& alors que ce n'est qu'un Date*!
Merci encore à ceux qui sauront m'aider.
Message édité par durk le 10-11-2008 à 18:23:03