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 :

no matching function for call to 'Point::affiche(Point&)'


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 no matching function for call to 'Point::affiche(Point&)'
    je suis nouveau sur c++, je travaille sur une class Point avec des setters et des getters et des méthodes mais je reçois l'erreur suivante :
    no matching function for call to 'Point::affiche(Point&)'
    le fichier Point.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
    21
    22
    23
     
    #ifndef POINT_H
    #define POINT_H
     
     
    class Point
    {
        public:
            Point();
            virtual ~Point();
            Point(const Point& other);
            void affiche();
            float deplace(float x, float y);
            float getAbscisse() const;
            float getOrdonnee() const;
            void setAbscisse(float abs);
            void setOrdonnee(float ord);
        private:
            float abscisse;
            float ordonnee;
    };
     
    #endif // POINT_H
    le fichier Point.cpp est comme suite:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include "Point.h"
    #include <iostream>
    Point::Point()
    {
        //ctor
    }
     
    Point::~Point()
    {
        //dtor
    }
     
    Point::Point(const Point& other)
    {
        //copy ctor
    }
    Point::affiche(Point p)
    {
        cout<<"les cordonnées du point sont:"<<p.getAbscisse()<<p.getOrdonnee();
    }
    Point::deplace(Point p)
    {
        float d;
        cout<<"pour déplacer le point entrer un taux de déplacement"<<endl;
        cin>>d;
        cout<<" "<<endl;
        p.setAbscisse(abscisse)=p.setAbscisse(abscisse)+d;
        p.setOrdonnee(ordonnee)=p.setOrdonnee(ordonnee)+d;
    }
    Point::setAbscisse(float abs)
    {
        abs=abscisse;
    }
    Point::setOrdonnee(float ord)
    {
        ord=ordonnee;
    }
    Point::getAbscisse() const
    {
        return abscisse;
    }
    Point::getOrdonnee() const
    {
        return ordonnee;
    }
    le fichier main.cpp est:
    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
    #include <iostream>
    #include "Point.h"
    #include <cstdlib>
     
    using namespace std;
     
    int main()
    {
        Point p;
        float abs, ord;
    cout<<"entrer les cordonnées du point"<<endl;
    cin>>abs>>ord;
    cout<<" "<<endl;
    p.setAbscisse(abs);
    p.setOrdonnee(ord);
    p.affiche(p);
    p.deplace(abs,ord);
    p.affiche(p);
        return 0;
    }

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour.

    Le compilateur t'indique simplement que la définition de la fonction Point::affiche est différente de sa déclaration.

    En effet tu as déclaré void Point::affiche() dans ton fichier header, mais tu as déclaré /*rien*/ Point::affiche(Point) dans le fichier cpp.

    Il faut donc mettre la même déclaration dans les deux fichiers.
    La meilleure fonction dans te cas sera void affiche() const dans le .h et void Point::affiche() const {} dans le .cpp. Ce const dans ce indique que la fonction ne modifiera pas l'objet sur lequel elle est appelée.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    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 j'ai apporté les modifications que tu m'as dit mais le problème persiste toujours malheureusement!
    j'ai apporté les modifications que tu m'as dit mais le problème persiste toujours malheureusement!

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Quel message d'erreur le compilateur te donne ?

    Ton code présente plusieurs incohérences :
    • La fonction affiche que je t'ai donné s'utilise comme ceci p.affiche(), mais dans le main tu l'utilises ainsi p.affiche(p)
    • Dans ton fichier c++ il manque les type de retour :

    float Point::getAbscisse() const
    void Point::setAbscisse(float) const
    pareil pour l’ordonnée et pour le déplacement

    • La méthode déplacer() a le même défaut que afficher() (prototypes que ne correspondent pas), mais elle est également fausse. Elle devrait uniquement modifier les coordonnées de l'objet courant et ne rien retourner.
    • Les méthodes set* sont erronées également, tu fais l'assignation à l'envers.
    • En outre, le destructeur n'a pas besoin d'être virtuel (mais c'est une remarque, pas une erreur)


    Je t'invite à corriger ces erreurs et à nous montrer le nouveau code ainsi que les erreurs du compilateur si il y en a.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  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 j'ai essayé de modifier mon code et de corriger les erreurs
    effectivement il y avait des erreurs sur mon code j'ai essayé de corriger les erreurs, mais cette fois j'ai reçu l'erreur suivante :'cout' was not declared in this scope. et le voici mon code:
    le fichier Point.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
    21
    22
     
    #ifndef POINT_H
    #define POINT_H
     
    class Point
    {
        public:
            Point();
            virtual ~Point();
            Point(const Point& other);
            void affiche(Point p) const;
            void deplace(float x, float y);
            float getAbscisse() const;
            float getOrdonnee() const;
            void setAbscisse(float abs);
            void setOrdonnee(float ord);
        private:
            float abscisse;
            float ordonnee;
    };
     
    #endif // POINT_H
    le fichier Point.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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include "Point.h"
    #include <iostream>
    Point::Point()
    {}
     
    Point::~Point()
    {}
     
    Point::Point(const Point& other)
    {}
     
    void Point::affiche(Point p) const
    {
        cout<<"les cordonnées du point sont:"<<p.getAbscisse()<<p.getOrdonnee();
    }
     
    void Point::deplace(float x, float y)
    {
        float d;
        cout<<"pour déplacer le point entrer un taux de déplacement"<<endl;
        cin>>d;
        cout<<" "<<endl;
        x=x+d;
        y=y+d;
        p.setAbscisse(x);
        p.setOrdonnee(y);
     
    }
     
    void Point::setAbscisse(float abs)
    {
        abscisse=abs;
    }
     
    void Point::setOrdonnee(float ord)
    {
        ordonnee=ord;
    }
     
    float Point::getAbscisse() const
    {
        return abscisse;
    }
     
    float Point::getOrdonnee() const
    {
        return ordonnee;
    }
    le fichier 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
    20
    21
     
    #include <iostream>
    #include "Point.h"
    #include <cstdlib>
     
    using namespace std;
     
    int main()
    {
        Point p;
        float abs, ord;
    cout<<"entrer les cordonnées du point"<<endl;
    cin>>abs>>ord;
    cout<<" "<<endl;
    p.setAbscisse(abs);
    p.setOrdonnee(ord);
    p.affiche(p);
    p.deplace(abs,ord);
    p.affiche(p);
        return 0;
    }

  6. #6
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Il manque simplement la directive using namespace dans ton fichier cpp.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  7. #7
    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 merci beaucoup vous m'avez beaucoup aider
    merci beaucoup vous m'avez beaucoup aidez à réaliser mon premier projet objet.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/01/2012, 14h34
  2. Réponses: 2
    Dernier message: 05/08/2011, 18h13
  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