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 :
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 #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.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 #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
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 ?
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; }
Merci d'avance.
Partager