IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

error: no matching function for call to 'ChauffeEau::ChauffeEau()'


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 34
    Points
    34
    Par défaut error: no matching function for call to 'ChauffeEau::ChauffeEau()'
    Bonjour,

    Je suis en train du code C++. Voici le morceau de code qui me génère l'erreur suivante: error: no matching function for call to 'ChauffeEau::ChauffeEau()':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "Noeud.h"
    #include <queue>
    #include "Message.h"
    #include "ChauffeEau.h"
    using namespace std;
    Noeud::Noeud(ChauffeEau ch1,int inQuota1,std::queue<Message> rq1) {
    	// TODO Auto-generated constructor stub
    	ch = ch1;
    	inQuota = inQuota1;
    	for(int j = 0; (unsigned)j < rq.size(); j++){
    		   rq.push(rq1.front());
    		   rq1.pop();
    	}
     
    }

    Chauffeau est une classe qui possède un constructeur avec des paramètre.

    Je serais content si quelqu'un peut me dire ce qui ne va pas et comment y remédier.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Je suppose que ta classe Noeud possède un membrer de type ChauffeEau (ch ?).
    Il faut savoir que dans un constructeur il vaut mieux utiliser les listes d'initialisation pour initialiser les membres de classe car sinon le constructeur fait appel au constructeur par défaut (donc sans argument) de chaque membre non initialisé dans ces listes d'initialisation.
    Le code du constructeur que tu as écrit correspond plus ou moins à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Noeud::Noeud(ChauffeEau ch1,int inQuota1,std::queue<Message> rq1)
    	:	ch()
    	,	inQuota()
    	,	rq()
    {
    	ch = ch1;
    	inQuota = inQuota1;
    	for(int j = 0; (unsigned)j < rq.size(); j++)
    	{
    		rq.push(rq1.front());
    		rq1.pop();
    	}
     }
    D'où ton problème de constructeur par défaut inexistant.
    Tu peux résoudre ton problème avec les listes d'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Noeud::Noeud(ChauffeEau ch1,int inQuota1,std::queue<Message> rq1)
    	:	ch( ch1 )
    	,	inQuota( inQuota1 )
    	,	rq( rq1 )
    {
     }
    Je vois malgré tout un autre problème, c'est que tu utilises des passages d'argument par copie, ce qui fait que ta file de messages est copiée avant d'être passée à la fonction, ce qui peut être lourd en fonction de la taille de cette file. De même pour ch1.
    Préfère les passages par référence (constante ou non), qui permettent de ne copier que l'adresse de la variable et non la variable complète.
    J'aurais écrit ton constructeur ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Noeud::Noeud(ChauffeEau const & ch1, int inQuota1, std::queue<Message> const & rq1)
    	:	ch( ch1 )
    	,	inQuota( inQuota1 )
    	,	rq( rq1 )
    {
     }
    EDIT :
    Tu remarqueras que je ne passe pas inQuota1 par référence, une adresse étant au mieux de la même taille qu'un int (en 32 bits) au pire plus grande (en 64 bits)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 34
    Points
    34
    Par défaut Merci
    Merci à vous tous. C'est résolu mon problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. error: no matching function for call to 'survingt'
    Par casse_noix dans le forum C++
    Réponses: 11
    Dernier message: 08/04/2015, 16h54
  2. No matching function for call to 'Joueur::Joueur'
    Par Go'Gaule dans le forum Débuter
    Réponses: 4
    Dernier message: 02/07/2011, 08h50
  3. Réponses: 8
    Dernier message: 09/07/2010, 17h02
  4. no matching function for call
    Par pimousse280187 dans le forum Linux
    Réponses: 1
    Dernier message: 06/06/2009, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo