Souci association entre classes, erreur de linker
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:
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:
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:
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:
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:
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