Bonsoir, j'ai programmé une classe pile prenant comme paramètres un entier dim(qui est la taille maximale de la pile), un entier taille(le nombre d'éléments que contient réellement la pile) et un pointeur d'entier *adr(qui va pointer sur le premier élément de mon tableau).
J'associe à cette classe plusieurs méthodes :
pile(int t=10); // Constructeur
pile(const pile &); // Constructeur de copie
~pile(); //Destructeur
void empile(int); //Empile l'entier en haut de la pile
int depile(); //Depile le sommet de la pile et renvoi l'élément enlevé
int vide() const; //Test si la pile est vide
int pleine() const; // Teste si la pile est pleine
int donnetaille() const; //Renvoi la taille de la pile
void affiche();//Affichage de ma pile
Je sépare mon programme en trois : un fichier pile.h, un pile.cpp et un main.cpp. Mon programme principal crée une pile et l'affiche, il n'a pas d'erreurs et fonctionne comme je le souhaite.
Maintenant je veux remplacer ma pile d'entier par une pile de type T et là c'est le drame...
J'obtiens plusieurs fois la même erreur, je n'ai encore jamais utilisé la classe template c'est surement une erreur de syntaxe. Pouvez vous m'aider a la trouver ? merci
Voici mon code :
-pile_t.h:
#ifndef pile_h
#define pile_h
template
class pile
{
private :
int dim;
int taille;
T * adr;
public :
pile(int t=10);
pile(const pile &);
~pile();
void empile(T);
T depile();
int vide()const;
int pleine()const;
int donnetaille()const;
void affiche();
//friend ostream & operator
using namespace std;
#include "pile_t.h"
template
pile::pile(int t)
{
taille=0;
dim=t;
adr=new T [dim];
}
template
pile::pile(const pile & P)
{
cout 0)
{
for(int i=0; i
pile::~pile()
{
cout
void pile::empile(T a)
{
if(taille
T pile::depile()
{
if(taille==0)
{
cout
int pile::vide() const
{
if(taille==0)
return 0;
else return 1;
}
template
int pile::pleine() const
{
if(taille==dim)
return 0;
else return 1;
}
template
int pile::donnetaille() const
{
return taille;
}
template
void pile::affiche()
{
if(taille>0)
{
for(int i=0; i
ostream & operator
using namespace std;
#include "pile_t.h"
int main()
{
int t,b;
float a;
cout > t;
pile A(t);
cout > t;
for(int i=0; i> a;
A.empile(a);
}
//cout > t;
pile B(t);
cout > t;
for(int i=0; i> b;
B.empile(b);
}
//cout ::~pile(void)" (??1?$pile@M@@QAE@XZ) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: __thiscall pile::~pile(void)" (??1?$pile@H@@QAE@XZ) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: void __thiscall pile::affiche(void)" (?affiche@?$pile@H@@QAEXXZ) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: void __thiscall pile::empile(int)" (?empile@?$pile@H@@QAEXH@Z) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: __thiscall pile::pile(int)" (??0?$pile@H@@QAE@H@Z) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: void __thiscall pile::affiche(void)" (?affiche@?$pile@M@@QAEXXZ) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: void __thiscall pile::empile(float)" (?empile@?$pile@M@@QAEXM@Z) référencé dans la fonction _main
main_t.obj : error LNK2019: symbole externe non résolu "public: __thiscall pile::pile(int)" (??0?$pile@M@@QAE@H@Z) référencé dans la fonction _main
C:\Documents and Settings\petit\Bureau\migs\C++\pile_template\Debug\pile_template.exe : fatal error LNK1120: 8 externes non résolus
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\petit\Bureau\migs\C++\pile_template\Debug\BuildLog.htm"
pile_template - 9 erreur(s), 0 avertissement(s)
Voilà merci de votre aide.
Ps : J'ai mis l'opérateur << en commentaire parce qu'à la compilation j'avais une autre(une seule) erreur :
pile_t.cpp
c:\documents and settings\...\pile_template\pile_t.cpp(96) : error C2955: 'pile'*: l'utilisation d'une classe modèle requiert une liste d'arguments modèle
c:\documents and settings\...\pile_template\pile_t.h(6)*: voir la déclaration de 'pile'
main_t.cpp
