Bonjour à tous,
Tout d'abord je précise que je débute en c++.
J'essaye actuellement de faire un petit programme qui gère une bibliothèque (travail scolaire), et pour celà je dois avoir des auteurs qui sont des instances d'une classe Auteur qui elle-même hérite d'une classe Personne.
Mon code ressemble donc à cela :
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 // Auteur.h #ifndef AUTEUR_H #define AUTEUR_H #include "Personne.h" /* * No description */ class Auteur : public Personne { public: // class constructor Auteur(); Auteur(char* name[4]):Personne(name){} // car les constructeurs d'initialisation ne sont jamais hérités //fonction membre char* getNom(); void setNom(char* name[4]); void displayName(void); // class destructor ~Auteur(); }; #endif // AUTEUR_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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 // Auteur.cpp #include <string.h> #include <stream.h> #include <iostream> #include <cstring> #include "auteur.h" // class's header file // class constructor Auteur::Auteur() { // insert your code here } // fonctions membres char* Auteur::getNom() { for(int i=0 ; i<4 ; i++) return Nom[i]; } void Auteur::displayName(void) { cout << "Auteurs: " ; for(int i=0 ; i<4 ; i++) cout << Nom[i] << " "; cout << endl; } void Auteur::setNom(char* name[4]) { for(int i=0 ; i<4 ; i++) { Nom[i]= new char(strlen(name[i])+1); strcpy(Nom[i],name[i]); } } // class destructor Auteur::~Auteur() { // insert your code here }
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 // Personne.h #ifndef PERSONNE_H #define PERSONNE_H /* * No description */ class Personne { protected: // je décide que l'on doit mettre 4 noms char* Nom[4]; public: // class constructor Personne(); Personne(char* name[4]); Personne(const Personne &pp); //fonction membre char* getNom(); void setNom(char* name[4]); void displayName(void); // class destructor ~Personne(); };
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 // Personne.cpp #include <string.h> #include "personne.h" // class's header file // class constructor Personne::Personne() { for(int i=0 ; i<4 ; i++) Nom[i]=0; } Personne::Personne(char* name[4]) // constructeur d'initialisation { for(int i=0 ; i<4 ; i++) { Nom[i]=new char[strlen(name[i])+1]; strcpy(Nom[i], name[i]); } } Personne::Personne(const Personne &pp) { for(int i=0 ; i<4 ; i++) { Nom[i] = new char[strlen(pp.Nom[i])+1]; strcpy(Nom[i], pp.Nom[i]); } } // class destructor Personne::~Personne() { for(int i=0 ; i<4 ; i++) if (Nom[i]) { delete Nom[i]; } }
Et voici une partie de ma fonction main en rapport avec tout ça :
Lors de la compilation, j'obtiens cette erreur:
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 #include <cstdlib> #include <iostream> #include "Auteur.h" using namespace std; int main(int argc, char *argv[]) { [...] Auteur a; char* name[4] = {"Oncle Bens" , "Oncle Picsou" , "Oncle Tom" , "Oncle Cloclo"}; Personne pp (name); [...] // Affichage a.displayName(); [...] system("PAUSE"); return EXIT_SUCCESS; }
[Linker error] undefined reference to `Personne::Nom'
Pourriez vous m'éclairer svp je cale complètement.
Un grand merci d'avance :D
Partager