Rebonjour à tous.

Voilà, je vais tenter de faire au plus court.

J'ai une série de classe héritant l'une de l'autre, et je souhaiterais les placer dans un Vecteur template.
Je m'explique:

J'ai une classe Personne, qui est la classe mère principale. Ensuite, j'ai une classe MembrePersonnel qui hérite de la classe Personne.
Après celà, j'ai une série de classes, PersonnelScientifique, PersonnelAdministratif, PersonnelSurveillant, ... héritant toutes de la classe MembrePersonnel et donc aussi de la classe Personne (indirectement).

Voilà, maintenant je dois mettre en place un Vecteur template qui va contenir des pointeurs vers les différentes personnes étant membres du personnel ainsi que les personnels administratif, scientifique, ...

Pour ce faire, je procède de la façon suivante dans ma classe Vecteur:

pour le .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
 
#ifndef _VECTEUR
#define _VECTEUR
 
#include<string>
 
#include"./piecemusee/piecemusee.h"
#include"./piecemusee/piecemuseeart.h"
#include"./personne/membrepersonnel.h"
#include"./personne/personneladministratif.h"
#include"./personne/personnelscientifique.h"
#include"./personne/personnelsurveillant.h"
 
template <class T> class Vecteur
{
private:
	T *Data;
	int nbrElem;
	int *Index;
public:
	// constructeur
	// d'initialisation
	Vecteur(int n = 20 );
 
	// destructeur
	~Vecteur(void)
	{
		delete[] Data;
	}
 
	// methodes d'acces au variables et de construction d'index
	T& operator[](int i){ return *(Data+i);};
	int placelibre();
	void setindex(int N, int NV){	Index[N] = NV; }
	int getindex(int N){	return Index[N];	}
 
};
#endif
pour le .cxx:
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
 
#include"Vecteur.h"
 
template <class T>
Vecteur<T>::Vecteur( int n )
{
	Data = new T[n];
	nbrElem = n;
 
	Index = new int[n];
	for( int i = 0; i < n; i++)
		Index[i] = 0;
}
 
template <class T>
int Vecteur<T>::placelibre()
{
	int i;
	for( i = 0; i<nbrElem && Index[i] != 0; i++);
 
	if( i >= nbrElem )
		i = -1;
	return i;
}
 
template class Vecteur<piecemusee>;
template class Vecteur<piecemuseeart>;
template class Vecteur<int>;
template class Vecteur<membrepersonnel>;
template class Vecteur<membrepersonnel*>;
template class Vecteur<personneladministratif*>;
template class Vecteur<personnelscientifique*>;
template class Vecteur<personnelsurveillant*>;
Je pense qu'il n'y a pas d'erreur dans le code précédent. Dans le main, je procède comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
// déclaration de mon Vecteur
Vecteur<membrepersonnel *> VMP(10);
 
// création d'un nouvel élément
VMP[imp] = new personneladministratif();
// saisie de l'élément créé
VMP[imp]->insert();
// incrémentation du nombre d'élément
imp++;
Par contre, lorsque j'exécute mon code, il ne me propose pas de saisir les données propres au personneladministratif, il s'arrête à la saisie du membrepersonnel.

Est ce que pour résoudre ce problème, je dois faire un casting quelque part? Si oui, où?
Ou alors est ce que je dois déclarer mon Vecteur différement? Parce que en fait je dois réussir à mettre toutes les valeurs de membrepersonnel et celle qui en hérite dans le même vecteur.

J'espère ne pas m'être embrouiller dans les explications de mon problème, et vous remercie d'avance pour l'aide que vous pourrez m'appoter.

Richard_sraing