Bonjour,
Je suis sur un programme cpp sous linux. J'ai créé une classe template "Vecteur" qui est censée pouvoir recevoir plusieurs types dont des classes que j'ai créé dans mon application.
Vecteur.h :
#ifndef _VECTEUR_H_
#define _VECTEUR_H_
#include <iostream>
#include "PieceMusee.h"
#include "Personne.h"
using namespace std;
template <class X> class Vecteur
{
private:
int nE;
static int ind;
int IndiceOK(const int i);
public:
X *Data;
Vecteur() { cout << "->> Construction du vecteur" << endl; nE=0; }
Vecteur(int n=10);
~Vecteur();
inline int getnE() { return nE; }
inline void setnE(int n) { nE = n; Data = new X[n]; }
void Saisie();
void Aff();
void Add(X, int);
X& operator[] (int i) { if(IndiceOK(i)) return *(Data+i); }
};
#endif
Vecteur.cxx
#include "Vecteur.h"
/*********************************************
* Vecteur template : Constructeur *
*********************************************/
template <class X> Vecteur<X>::Vecteur(int n)
{
if(n>=0)
{
#ifdef DEBUG
cout << "Construction du vecteur";
#endif
Data=new X[n];
nE=n;
}
}
/*********************************************
* Vecteur template : Déstructeur *
*********************************************/
template <class X>Vecteur<X>::~Vecteur()
{
#ifdef DEBUG
cout << "Destruction du vecteur";
#endif
if(Data)
delete []Data;
}
/****************************************************************************
* Vecteur template : Méthode permettant de vérifier si l'indice est correct *
****************************************************************************/
template <class X>int Vecteur<X>::IndiceOK(const int i)
{
if(i<0 || i>=nE)
{
cout << "<<<Erreur : Indice d'element inexistant!>>>";
return 0;
}
return 1;
}
/*********************************************
* Vecteur template : Méthode d'affichage *
*********************************************/
template <class X>void Vecteur<X>::Aff()
{
for(int i=0; i<nE; i++)
cout << Data[i] << endl;
}
/*********************************************
* Vecteur template : Méthode de saisie *
*********************************************/
template <class X>void Vecteur<X>::Saisie()
{
for(int i=0; i<nE; i++)
{
cout << "Elem " << i+1 << " : " << endl; cin >> Data[i];
}
}
template <class X>void Vecteur<X>::Add(X obj, int i)
{
Data[i] = obj;
}
template class Vecteur<int>;
template class Vecteur<PieceMuseeArt>;
template class Vecteur<PieceMusee>;
template class Vecteur<MembrePersonnel>;
La classe semble bien fonctionner puisque dans le Main je suis capable de créer un vecteur d'entier, de le remplir et l'aficher et de faire de même avec un vecteur de PieceMuseeArt (classe de mon applic).
La ou le problème se pose, c'est
quand je veux q'une de mes classes possède un tel vecteur en variable membre,
j'arrive à le déclarer sans provoquer d'erreur à la compilation,
mais je n'arrive jamais à l'utiliser,
la j'ai des erreurs à la compilation du style "have no type".
Je pense que j'ai juste oublié une petite chose dans le code pour que le compilateur comprenne bien le type de la variable qui instanciera la classe template vecteur mais je 'y arrive pas,
si quelqu'un sait m'aider c'est cool, merci .