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 :

Premier essai avec les classes : échec


Sujet :

C++

  1. #1
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut Premier essai avec les classes : échec
    Je reçois toute une floppée de "undefined reference to [...]" dans main() où j'essaie d'utiliser ma classe, qui est sensée représenter des fraction...Pouvez-vous me dire où est le problème ? Voici le code :
    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
    22
    #include <iostream>
    #include "Fraction.h"
     
    using namespace std;
     
    int main()
    {
        Fraction a(4,5);      //Déclare une fraction valant 4/5
        Fraction b(2);        //Déclare une fraction valant 2/1 (ce qui vaut 2)
        Fraction c,d;         //Déclare deux fractions valant 0
        c = a+b;               //Calcule 4/5 + 2/1 = 14/5
        d = a*b;               //Calcule 4/5 * 2/1 = 8/5
        cout << a << " + " << b << " = " << c << endl;
        cout << a << " * " << b << " = " << d << endl;
        if(a > b)
            cout << "a est plus grand que b." << endl;
        else if(a==b)
            cout << "a est egal a b." << endl;
        else
            cout << "a est plus petit que b." << endl;
        return 0;
    }
    Fraction.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
    24
    25
    26
    27
    28
    29
    30
    31
    #ifndef FRACTION_H_INCLUDED
    #define FRACTION_H_INCLUDED
     
    #include <iostream>
     
    class Fraction
    {
    private:
        int numerateur;
        int denominateur;
     
     
    public:
        Fraction();
        Fraction(int a,int b);
        Fraction(int a);
        ~Fraction();
        int getnum() const; //renvoie la valeur du numerateur
        int getden() const; //renvoie la valeur du denominateur
        double getval() const; //renvoie la valeur numerique de la fraction
    };
     
    //puis les surcharges d'operateurs
    bool operator==(Fraction const& a,Fraction const& b);
    bool operator>(Fraction const& a,Fraction const& b);
    int pgcd(int a,int b);
    Fraction operator+(Fraction const& a,Fraction const& b);
    Fraction operator*(Fraction const& a,Fraction const& b);
    std::ostream& operator<<(std::ostream &flux,Fraction const& a);
     
    #endif // FRACTION_H_INCLUDED
    Fraction.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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    #include <iostream>
     
    using namespace std;
     
    int pgcd (int a,int b) //calcule le pgcd, pour pouvoir simplifier la fraction.
    {
        if (a<0)
        {
            a=-a;
        }
        if (b<0)
        {
            b=-b;
        }
        int c;
        if (a<b)
        {
            c=a;
            a=b;
            b=c;
        }
        while (c!=0)
        {
            c=a%b;
            a=b;
            b=c;
        }
        return a;
    }
    class Fraction //la classe elle-meme
    {
    private:
        int numerateur;
        int denominateur;
     
     
    public:
        Fraction::Fraction() //constructueur de Fraction par defaut
        {
            numerateur=0;
            denominateur=1;
        }
        Fraction::Fraction(int a,int b) constructeur de Fraction predeterminee
        {
            if (b==0)
            {
                cout<<"Erreur : impossible de diviser par 0. Denominateur initialise a 1."<<endl; //pas bete la mouette !
                b=1;
            }
            int c(pgcd(a,b));
            numerateur=a/c;
            denominateur=b/c;
        }
        Fraction::Fraction(int a) //constructeur de Fraction entiere
        {
            numerateur=a;
            denominateur=1;
        }
        ~Fraction() //destructueur ici pour la beaute de la chose...
        {
            //rien
        }
     
        int Fraction::getnum() const
        {
            return numerateur;
        }
     
        int Fraction::getden() const
        {
            return denominateur;
        }
        double Fraction::getval() const
        {
            return numerateur/denominateur;
        }
     
    };
     
    //puis les surcharges d'operateurs
    bool operator==(Fraction const& a,Fraction const& b)
    {
        double x(a.getval());
        double y(b.getval());
        if (x==y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator>(Fraction const& a,Fraction const& b)
    {
        double x(a.getval())
        double y(a.getval())
        if (x>y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
     
    Fraction operator+(Fraction const&a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        int c(dena);
        numa*=denb;
        dena*=denb;
        numb*=c;
        denb*=c;
        Fraction ret(numb+numa,denb);
        return ret;
    }
    Fraction operator*(Fraction const& a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        Fraction c(numa*numb,dena*denb);
        return Fraction;
    }
    ostream&*operator<<(ostream*&flux,*Fraction*const&*a) //surcharge de l'operateur de flux pour cout
    {
        if(a.getden()==1)
        {
            cout<<a.getnum()<<endl;
        }
        else
        {
            cout<<a.getnum<<"/"<<a.getden<<endl;
        }
        return flux;
    }
    Alors bien sûr je n'ai pas surchargé TOUS les opérateurs, par exemple on ne peut pas faire de division...Bon, je ne me servirais probablement pas de ça, c'était juste pour m'entraîner à utiliser les classes et les surcharges d'opérateurs qui vont avec, mais ça ne fonctionne pas...Quelqu'un peut me dire quel est le problème ?
    Merci d'avance.
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    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 113
    Points : 32 960
    Points
    32 960
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    une classe définie dans un .h n'a pas à l'être dans le .cpp
    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
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Bon, voici le nouveau Fraction.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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    #include <iostream>
     
    using namespace std;
     
    int pgcd (int a,int b)
    {
        if (a<0)
        {
            a=-a;
        }
        if (b<0)
        {
            b=-b;
        }
        int c;
        if (a<b)
        {
            c=a;
            a=b;
            b=c;
        }
        while (c!=0)
        {
            c=a%b;
            a=b;
            b=c;
        }
        return a;
    }
     
     
        Fraction::Fraction()
        {
            numerateur=0;
            denominateur=1;
        }
        Fraction::Fraction(int a,int b)
        {
            if (b==0)
            {
                cout<<"Erreur : impossible de diviser par 0. Denominateur initialise a 1."<<endl;
                b=1;
            }
            int c(pgcd(a,b));
            numerateur=a/c;
            denominateur=b/c;
        }
        Fraction::Fraction(int a)
        {
            numerateur=a;
            denominateur=1;
        }
        Fraction::~Fraction()
        {
            //rien
        }
     
        int Fraction::getnum() const
        {
            return numerateur;
        }
     
        int Fraction::getden() const
        {
            return denominateur;
        }
        double Fraction::getval() const
        {
            return numerateur/denominateur;
        }
     
    bool operator==(Fraction const& a,Fraction const& b)
    {
        double x(a.getval());
        double y(b.getval());
        if (x==y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator>(Fraction const& a,Fraction const& b)
    {
        double x(a.getval())
        double y(a.getval())
        if (x>y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
     
    Fraction operator+(Fraction const&a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        int c(dena);
        numa*=denb;
        dena*=denb;
        numb*=c;
        denb*=c;
        Fraction ret(numb+numa,denb);
        return ret;
    }
    Fraction operator*(Fraction const& a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        Fraction c(numa*numb,dena*denb);
        return Fraction;
    }
    ostream&*operator<<(ostream*&flux,*Fraction*const&*a)
    {
        if(a.getden()==1)
        {
            cout<<a.getnum()<<endl;
        }
        else
        {
            cout<<a.getnum<<"/"<<a.getden<<endl;
        }
    ****return*flux;
    }
    Ça ne fonctionne toujours pas...Qu'est-ce que j'ai encore fait de mal ?
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  4. #4
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    Les surcharges d'opérateur peuvent être mises dans la classe Fraction. (C'est même fortement conseillé).
    Les membres privés pour celles ci pourront alors y être directement utilisés.

    Ensuite certaines choses paraissent louche, "****return*flux;"
    Le mieux serait de nous donner les erreurs.

  5. #5
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Les *** sont des espaces dans mon code, ce doit être une erreur lors du copier-coller.
    Pour les surcharges d'opérateurs, le tuto d'Open Classrooms (anciennement SDZ) disait qu'il ne fallait surtout pas les mettres dans la classe car ce n'étaient pas des méthodes...
    Pour les erreurs, toujours le même "undefined reference to" :
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  6. #6
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Inclure le header dans le fichier source :
    Fraction.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "Fraction.h"
    ...
    #edit
    Et en quoi les comparateurs ne pouraientt être des méthodes de cette classe ?
    Fraction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef FRACTION_H_INCLUDED
    #define FRACTION_H_INCLUDED
     
    class Fraction
    {
    private:
        int numerateur;
        int denominateur;
    public:
        bool operator==(Fraction const& f);
    };
     
    #endif//FRACTION_H_INCLUDED
    Fraction.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "Fraction.h"
     
    bool Fraction::operator==(Fraction const& f)
    {
        return((numerateur/denominateur)==(f.numerateur/f.denominateur));
    }
    On peut ainsi accèder directement aux membres privés.
    Ainsi le .get() deviendrait obsolète, et on aura plus à se préocuper des valeurs contenue.

  7. #7
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Ça ne change rien...Rah...Si je ne suis pas fichu de maîtriser les classes c'est pas la peine de me mettre à la POO !
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  8. #8
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    J'ai tout repris et enlevé les flux
    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
    #include "Fraction.h"
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        Fraction a(4,5);      //Déclare une fraction valant 4/5
        Fraction b(2);        //Déclare une fraction valant 2/1 (ce qui vaut 2)
        Fraction c,d;         //Déclare deux fractions valant 0
        c = a+b;               //Calcule 4/5 + 2/1 = 14/5
        d = a*b;               //Calcule 4/5 * 2/1 = 8/5
        return 0;
    }
    Fraction.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
    24
    25
    26
    27
    28
    29
    30
    #ifndef FRACTION_H_INCLUDED
    #define FRACTION_H_INCLUDED
     
    #include <iostream>
     
    class Fraction
    {
    private:
        int numerateur;
        int denominateur;
     
     
    public:
        Fraction();
        Fraction(int a,int b);
        Fraction(int a);
        ~Fraction();
        int getnum() const; //renvoie la valeur du numerateur
        int getden() const; //renvoie la valeur du denominateur
        double getval() const; //renvoie la valeur numerique de la fraction
    };
     
    //puis les surcharges d'operateurs
    bool operator==(Fraction const& a,Fraction const& b);
    bool operator>(Fraction const& a,Fraction const& b);
    int pgcd(int a,int b);
    Fraction operator+(Fraction const& a,Fraction const& b);
    Fraction operator*(Fraction const& a,Fraction const& b);
     
    #endif // FRACTION_H_INCLUDED
    Fraction.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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    #include "Fraction.h"
     
    #include <iostream>
     
    using namespace std;
     
    int pgcd (int a,int b)
    {
        if (a<0)
        {
            a=-a;
        }
        if (b<0)
        {
            b=-b;
        }
        int c;
        if (a<b)
        {
            c=a;
            a=b;
            b=c;
        }
        while (c!=0)
        {
            c=a%b;
            a=b;
            b=c;
        }
        return a;
    }
     
     
        Fraction::Fraction()
        {
            numerateur=0;
            denominateur=1;
        }
        Fraction::Fraction(int a,int b)
        {
            if (b==0)
            {
                cout<<"Erreur : impossible de diviser par 0. Denominateur initialise a 1."<<endl;
                b=1;
            }
            int c(pgcd(a,b));
            numerateur=a/c;
            denominateur=b/c;
        }
        Fraction::Fraction(int a)
        {
            numerateur=a;
            denominateur=1;
        }
        Fraction::~Fraction()
        {
            //rien
        }
     
        int Fraction::getnum() const
        {
            return numerateur;
        }
     
        int Fraction::getden() const
        {
            return denominateur;
        }
        double Fraction::getval() const
        {
            return numerateur/denominateur;
        }
     
    bool operator==(Fraction const& a,Fraction const& b)
    {
        double x(a.getval());
        double y(b.getval());
        if (x==y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    bool operator>(Fraction const& a,Fraction const& b)
    {
        double x(a.getval());
        double y(a.getval());
        if (x>y)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
     
    Fraction operator+(Fraction const&a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        int c(dena);
        numa*=denb;
        dena*=denb;
        numb*=c;
        denb*=c;
        Fraction ret(numb+numa,denb);
        return ret;
    }
    Fraction operator*(Fraction const& a,Fraction const& b)
    {
        int numa(a.getnum());
        int dena(a.getden());
        int numb(b.getnum());
        int denb(b.getden());
        Fraction c(numa*numb,dena*denb);
        return c;
    }
    Celui çi compile chez moi.

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Les surcharges d'opérateur peuvent être mises dans la classe Fraction. (C'est même fortement conseillé).
    Non, ce n'est pas fortement conseillé, bien au contraire. Pour un simple raison de symétrie (qui s'applique ici d'ailleurs étant donné qu'il y a un constructeur non explicit qui prends un int, ce qui est d'ailleurs assez logique) : la surcharge des opérateurs ne permettrait pas les mêmes conversions entre l'opérande de gauche et de droite (en gros b+2 avec b une fraction fonctionnerait, mais pas 2+b).

    Généralement ce qui est conseillé est d'avoir des opérateurs "affectant" (i.e. de la forme op= comme +=, -=, etc.) membres de la classe et des opérateurs simple (+, -, etc.) non-membre et non-ami définis à partir des premiers.


    Sinon concernant le problème initial : comme ce code est-il compilé ? Est-ce que Fraction.cpp est bien lié ?

  10. #10
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gl Voir le message
    la surcharge des opérateurs ne permettrait pas les mêmes conversions entre l'opérande de gauche et de droite (en gros b+2 avec b une fraction fonctionnerait, mais pas 2+b).
    Pourquoi b+2 fonctionnerait ?

    Ce serait b+c(2) avec b et c une fraction.

  11. #11
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    PilloBuenaGente : darn, pas chez moi !

    Non le code ne compile pas ! J'ai essayé de redémarrer Code::Blocks (je possède la dernière version), et ça ne change rien : "undefined reference to" dans mein() sur tout ce qui vient de Fraction.h.

    Comment ça "Est-ce que Fraction.cpp est bien lié ?" ? Je n'ai pas besoin de l'inclure où que ce soit, si ?
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par PilloBuenaGente Voir le message
    Pourquoi b+2 fonctionnerait ?
    Parce qu'il y a un constructeur non explicit de fraction qui prends un entier en unique paramètre. Ce qui permet une conversion implicite (qui a du sens dans ce cas précis, un entier étant une fraction où le dénominateur vaut 1).

    Citation Envoyé par Neoflash Okashi Voir le message
    Comment ça "Est-ce que Fraction.cpp est bien lié ?" ? Je n'ai pas besoin de l'inclure où que ce soit, si ?
    Il faut l'ajouter au projet code::block.
    Peux-tu fournir le build log ?

  13. #13
    Membre régulier Avatar de ekieki
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Avril 2014
    Messages : 34
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par Neoflash Okashi Voir le message
    PilloBuenaGente : darn, pas chez moi !

    Non le code ne compile pas ! J'ai essayé de redémarrer Code::Blocks (je possède la dernière version), et ça ne change rien : "undefined reference to" dans mein() sur tout ce qui vient de Fraction.h.

    Comment ça "Est-ce que Fraction.cpp est bien lié ?" ? Je n'ai pas besoin de l'inclure où que ce soit, si ?
    Au niveau du projet CodeBlocks, il faut que tu indiques que le fichier Fraction.cc contribue à la fabrication de la cible.

  14. #14
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    J'ai trouvé, c'était effectivement ça ! J'avais rien coché dans "Belongs in tergets" lors de la création du fichier, pour voir ce que ça faisait...Ben ça fait que ça marche pas patate...
    Là j'ai encore quelques erreurs, mais des trucs comme "expected ';' or ',' before 'double'", "stray \240 in program", des trucs que je connais et peux régler tout seul...Merci à tous !
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 551
    Points
    218 551
    Billets dans le blog
    118
    Par défaut
    Le stray 240, c'est un espace blanc (ou un caractère invisible), souvent se trouver autour des '[' ']' qui est, car on appuie trop longtemps sur Alt Gr. En effet, un Alt Gr + Espace provoque ce caractère invisible qui n'est pas un espace.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Membre habitué
    Avatar de Glân von Brylân
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2014
    Messages : 133
    Points : 186
    Points
    186
    Par défaut
    Oui je sais, c'est l'espace insécable, ça m'arrive souvent quand je fais des copier-coller du code du SDZ, je connais ne t'inquiète pas
    Les pointeurs intelligents, c'est mignon mais trop long à écrire.

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

Discussions similaires

  1. Premier pas avec les class
    Par Jiyuu dans le forum Tkinter
    Réponses: 7
    Dernier message: 17/02/2008, 11h49
  2. [POO] Problème avec les classes
    Par peypey dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 15h05
  3. Réponses: 3
    Dernier message: 18/04/2006, 22h49
  4. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25
  5. Réponses: 7
    Dernier message: 05/10/2004, 13h44

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