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

  FORUM HardWare.fr
  Programmation
  C++

  [C++][resolu]error: no matching function for call to...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++][resolu]error: no matching function for call to...

n°1810347
durk
Posté le 10-11-2008 à 11:57:57  profilanswer
 

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

Citation :


[...]  
#include "CompteEnBanque.h"
public: std::string historiqueMensuel(Date * date);  
[...]  


 
Dans le Banque.cpp

Citation :


 
[...]  
    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

Citation :


[...]  
#include"Date.h"
 
std::string releve_mensuel(Date * date);
[...]  


 
 
CompteEnBanque.cpp

Citation :


 
 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 cité 2 fois
Message édité par durk le 10-11-2008 à 18:23:03
mood
Publicité
Posté le 10-11-2008 à 11:57:57  profilanswer
 

n°1810349
ogaby
Posté le 10-11-2008 à 12:02:13  profilanswer
 

durk a écrit :

[...]
Dans le banque.h

Citation :

[...]  
#inclide "CompteEnBanque.h"
public: std::string historiqueMensuel(Date * date);  
[...]  

[...]


 [:cend]

n°1810353
durk
Posté le 10-11-2008 à 12:06:53  profilanswer
 

^^ merci, mais en fait cette faute vient du fait que j'ai retappé en partie mon code.
Sur l'orignale elle y est pas  :ange: (j'espere que je l'aurais vu sinon etant donné le nombre d'error auquel j'aurais eu droit  :sweat: ).
 
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...


Message édité par durk le 10-11-2008 à 12:08:07
n°1810360
Joel F
Real men use unique_ptr
Posté le 10-11-2008 à 12:26:26  profilanswer
 

Ta méthode travaille sur des objets const, elle doit donc être déclarée const

 
Code :
  1. std::string releve_mensuel(Date * date) const;


Message édité par Joel F le 10-11-2008 à 12:26:40
n°1810366
Taz
bisounours-codeur
Posté le 10-11-2008 à 12:46:08  profilanswer
 

T'en as vraiment besoin des ces * et de ces *& ?

n°1810370
durk
Posté le 10-11-2008 à 12:49:47  profilanswer
 

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


Message édité par durk le 10-11-2008 à 12:50:07
n°1810391
durk
Posté le 10-11-2008 à 13:40:35  profilanswer
 

Personne ??  :(  
 
jvois vraiment pas d'ou ca peut venir... :cry:

n°1810394
Elmoricq
Modérateur
Posté le 10-11-2008 à 13:44:07  profilanswer
 

La classe "CompteEnBanque" ne contient pas de méthode "releve_mensuel".

n°1810400
durk
Posté le 10-11-2008 à 13:50:59  profilanswer
 

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

n°1810405
Elmoricq
Modérateur
Posté le 10-11-2008 à 13:58:24  profilanswer
 

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.


Message édité par Elmoricq le 10-11-2008 à 13:58:55
mood
Publicité
Posté le 10-11-2008 à 13:58:24  profilanswer
 

n°1810409
Elmoricq
Modérateur
Posté le 10-11-2008 à 14:03:33  profilanswer
 

C'est la définition de la classe que je souhaite examiner.

n°1810415
durk
Posté le 10-11-2008 à 14:13:02  profilanswer
 

heu... desolé mais jcomprends pas ce que tu veux exactement...:(  
 
les entetes?
 

Citation :


#ifndef BAN_H
#define BAN_H
 
#include"CompteEnBanque.h"
 
class Banque{
 
[...]


 

Citation :


#ifndef COMPTE_H
#define COMPTE_H
 
#include<iostream>
#include<sstream>
#include<list>
#include"Date.h"
 
class CompteEnBanque{
[...]
 


 
ou c'est autre chose?

n°1810418
Elmoricq
Modérateur
Posté le 10-11-2008 à 14:14:52  profilanswer
 

Code :
  1. class CompteEnBanque {
  2. //contenu
  3. };


 
Je voudrais voir "contenu".

n°1810419
durk
Posté le 10-11-2008 à 14:16:36  profilanswer
 

soit:   :jap:  
 

Code :
  1. #include"Date.h"
  2. class CompteEnBanque{
  3. protected:
  4.  [...]
  5. public:
  6.  [...]
  7.  std::string releve_mensuel(Date * date);
  8.  [...]
  9. };
  10.  
  11.    
  12. #endif


Message édité par durk le 11-11-2008 à 11:59:03
n°1810421
Elmoricq
Modérateur
Posté le 10-11-2008 à 14:25:29  profilanswer
 

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.

Message cité 1 fois
Message édité par Elmoricq le 10-11-2008 à 14:26:35
n°1810437
durk
Posté le 10-11-2008 à 15:10:15  profilanswer
 

:??:

n°1810457
Elmoricq
Modérateur
Posté le 10-11-2008 à 15:44:12  profilanswer
 

Pourquoi tu utilises un const_iterator et pas un iterator tout bête ?

n°1810467
durk
Posté le 10-11-2008 à 15:55:54  profilanswer
 

j'ai vu ca sur un tuto :ange: , j'ai pas cherché plus loin ^^.
 
jvais tester si ca change quelque chose sans.
Merci pour la remarque.

n°1810509
Joel F
Real men use unique_ptr
Posté le 10-11-2008 à 17:22:18  profilanswer
 

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 :o

n°1810534
durk
Posté le 10-11-2008 à 18:16:01  profilanswer
 

Wé c'etait ca!!!!
 
Franchement, passer deux jours sur ca, jsuis defait!!
 
Merci à tous!
 :jap:

n°1810596
Elmoricq
Modérateur
Posté le 10-11-2008 à 19:52:02  profilanswer
 

durk a écrit :

j'ai vu ca sur un tuto :ange: , 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.

n°1838715
niarfad
Posté le 16-01-2009 à 04:16:39  profilanswer
 

Elmoricq a écrit :

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.


 
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 :


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*!  


 
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 :
  1. void print(ostream &os) const
  2.     {
  3.         iterateur<ExprAr*> it(liste_fils);
  4.         ...
  5.     }


 
erreur :

Code :
  1. erreur: no matching function for call to «iterateur<ExprAr*>::iterateur(const liste<ExprAr*>& )»|
  2. note: candidats sont: iterateur<T>::iterateur(liste<T>& ) [with T = ExprAr*]|


 
c'est exactement ce que je fais
c'est le const qui fout sa merde, pourquoi ?

n°1838757
Taz
bisounours-codeur
Posté le 16-01-2009 à 09:42:54  profilanswer
 

bah oui.

n°1838770
Joel F
Real men use unique_ptr
Posté le 16-01-2009 à 10:08:22  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


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

  [C++][resolu]error: no matching function for call to...

 

Sujets relatifs
[resolu] Lire un fichier textePb bouton-image avec php [résolu]
[ C ] Erreur de segmentation (core dumped)[résolu] aide sur une fonction
[Résolu] FERMER CE TOPIC VITE !!!Programmation Threads en C++
matrice carré dynamique? (résolu)[résolu] Image ne s'affichant qu'après actualisation de la page
utiliser une dll compilée en C# dans un projet VisualC++[Résolu][JDBC] Insertion image base de données Oracle 9i
Plus de sujets relatifs à : [C++][resolu]error: no matching function for call to...


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