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 :

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;
}
Lors de la compilation, j'obtiens cette erreur:

[Linker error] undefined reference to `Personne::Nom'

Pourriez vous m'éclairer svp je cale complètement.
Un grand merci d'avance :D