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

C++ Discussion :

erreur de compilation "no matching function for call" en C++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2015
    Messages : 39
    Points : 27
    Points
    27
    Par défaut erreur de compilation "no matching function for call" en C++
    Bonjour,
    je travail sur un exercice de c++ où je dois redéfinir l'opérateur "=" pour une classe "set_int" définit ci-dessous. Sauf que le compilateur m'affiche l'erreur suivante:
    no matching function for call to 'set_int::set_int()'
    .
    merci de m'aider à corriger cette classe pour qu'elle compile d'abord avant de redéfinir l'opérateur d'affectation "=".
    set_int.h
    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
    16
    17
    18
    19
    20
    #ifndef SET_INT_H
    #define SET_INT_H
     
     
    class set_int
    {
        int * adval ; // adresse du tableau des valeurs
        int nmax ; // nombre maxi d'éléments
        int nelem ; // nombre courant d'éléments
     
        public:
            set_int(int dim);
            set_int(const set_int& e);
            ~set_int();
            void ajoute (int) ; // ajout d'un élément
            int appartient (int) ; // appartenance d'un élément
            int cardinal () ; // cardinal de l'ensemble
    };
     
    #endif // SET_INT_H
    set_int.cpp
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include "set_int.h"
    #include <iostream>
    using namespace std;
     
    set_int::set_int (int dim)
    {
        adval = new int [nmax = dim] ; // allocation tableau de valeurs
        nelem = 0 ;
    }
    set_int::set_int (const set_int& e) // ou set_int::set_int (const set_int & e)
    {
    adval = new int [nmax = e.nmax] ; // allocation nouveau tableau
    nelem = e.nelem ;
    int i ;
    for (i=0 ; i<nelem ; i++) // copie ancien tableau dans nouveau
    adval[i] = e.adval[i] ;
    }
    set_int::~set_int ()
    {
        delete adval ; // libération tableau de valeurs
    }
    void set_int::ajoute (int nb)
    {
        if (!appartient (nb) && (nelem<nmax)) adval [nelem++] = nb ;
    }
    int set_int::appartient (int nb)
    {
        int i=0 ;
        while ( (i<nelem) && (adval[i] != nb) ) i++ ;
        return (i<nelem) ;
    }
    int set_int::cardinal ()
    {
        return nelem ;
    }
    main.cpp
    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
    16
    17
    18
    19
    #include <iostream>
    #include "set_int.h"
     
    using namespace std;
     
    int main()
    {
        set_int p;
        cout << "donnez 20 entiers \n" ;
        int i, n ;
        for (i=0 ; i<20 ; i++)
        {
            cin >> n ;
            p.ajoute(n);
        }
        cout << "il y a : " <<p.cardinal()<< " entiers différents\n" ;
     
        return 0;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    Il t'indique qu'il ne trouve pas de constructeur sans paramètre. Et pour cause, tu n'en as pas, alors pourquoi vouloir en appeler un en construisant un objet sans paramètre ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 107
    Points
    6 107
    Par défaut
    Citation Envoyé par monsrhf Voir le message
    Erreur de compilation : C'est cette ligne qui essaie d'appeler le constructeur par défaut de "set_int" qui n'existe pas.

    Citation Envoyé par monsrhf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set_int::~set_int ()
    {
        delete adval ; // libération tableau de valeurs
    }
    Comportement indéfini à l'exécution. Il ne faut pas utiliser delete mais delete[].

    Citation Envoyé par monsrhf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            int appartient (int) ; // appartenance d'un élément
    Ça marche, mais il est préférable de retourner un bool plutôt qu'un int.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2015
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    Il t'indique qu'il ne trouve pas de constructeur sans paramètre. Et pour cause, tu n'en as pas, alors pourquoi vouloir en appeler un en construisant un objet sans paramètre ?
    Salut,
    mais le constructeur est bien défini que ce soit dans ".h" ou le ".cpp"
    où est donc le problème?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Février 2015
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Erreur de compilation : C'est cette ligne qui essaie d'appeler le constructeur par défaut de "set_int" qui n'existe pas.


    Comportement indéfini à l'exécution. Il ne faut pas utiliser delete mais delete[].


    Ça marche, mais il est préférable de retourner un bool plutôt qu'un int.
    Salut,
    mais le constructeur est bien défini que ce soit dans le ".h" ou le ".cpp"
    où est donc le problème?

  6. #6
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 470
    Points : 6 107
    Points
    6 107
    Par défaut
    La classe set_int possède deux constructeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set_int(int dim);
    set_int(const set_int& e);

    On peut les appeler ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set_int set1(20);   // appelle le constructeur "set_int::set_int(int dim)" avec le paramètre 20
    set_int set2(set1); // appelle le constructeur "set_int::set_int(const set_int& e);" avec le paramètre set1

    Par contre, quand tu écris :
    le compilateur cherche un constructeur de "set_int" qui peut n'avoir aucun paramètre, mais il n'en existe pas.
    Un constructeur qui peut n'avoir aucun paramètre s'appelle le "constructeur par défaut".

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2014, 21h50
  2. Réponses: 1
    Dernier message: 11/01/2014, 19h57
  3. No matching function for call to 'Joueur::Joueur'
    Par Go'Gaule dans le forum Débuter
    Réponses: 4
    Dernier message: 02/07/2011, 07h50
  4. Réponses: 8
    Dernier message: 09/07/2010, 16h02
  5. no matching function for call
    Par pimousse280187 dans le forum Linux
    Réponses: 1
    Dernier message: 06/06/2009, 21h08

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