Erreur dans mon main template et classe objet
Bonsoir,
j'ai écrit un code composé de 3 classes , pile liste file , une liste
J'ai voulu le réaliser en template mais dans mon main j'ai plein d'erreur que je comprends pas, voici mon code
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
| #include <iostream>
#include <ostream>
#include <stdio.h>
#include <string.h>
template<typename T>
class Noeud
{
friend class CList;
friend class CFile;
friend class CPile;
private :
T valeur;
Noeud* nextNoeud;
public :
Noeud(int v)
{
valeur = v;
nextNoeud = 0;
}
~Noeud()
{
delete this -> nextNoeud;
}
T getVal() const
{
return this -> valeur;
}
Noeud* getNextNoeud()
{
return this -> nextNoeud;
}
void setNextNoeud(Noeud* n)
{
this -> nextNoeud = n;
}
};
template<typename T>
class CList
{
friend class CFile;
friend class CPile;
private :
Noeud<T> *m_head;
T m_taille;
public :
CList()
{
m_head = 0;
m_taille = 0;
}
~CList()
{
delete this -> m_head;
}
friend std::ostream& ::operator<<(std::ostream& flux,const CList<T> & l){
Noeud<T> *p = l.m_head;
while(p != 0)
{
flux << p -> getVal() << " ";
p = p -> getNextNoeud();
}
flux << std::endl;
return flux;
}
virtual CList& operator<(T val) = 0; // virtual car on le reutilise dans les sous classes pile et file
CList& operator>(T& val) // depiler, commune à tous , retourne i car il y a une reference
{
if(this->m_head == 0 )
std::cerr << "liste vide..."<< std :: endl;
Noeud<T>* n = this -> m_head;
this -> m_head = this -> m_head -> nextNoeud; // élément suivant de la liste
val = n -> valeur;
n -> nextNoeud = 0; // retirer juste le premier noeud car sinon se détruit en cascade
delete n;
m_taille--;
return (*this);
}
};
template<typename T>
class CPile : public CList<T>
{
public :
CPile() : CList<T>()
{
}
~CPile()
{
}
virtual CList<T>& operator<(T val)
{
Noeud<T>* m = new Noeud<T>(val); // créer un noeud avec la val dedans
m -> setNextNoeud(this->m_head); // pour que m pointe sur head et que la liste soit cohérente
this->m_head = m; // la liste prend la valeur du nouvo noeud
this->m_taille++;
return *this;
}
};
template<typename T>
class CFile : public CList<T>
{
public :
CFile() : CList<T>()
{
}
~CFile()
{
}
virtual CList<T>& operator<(T val)
{
/* cas ou noeud est vide */
if(this -> m_taille == 0)
{
this -> m_head = new Noeud<T>(val);
}
else
{
Noeud<T>* ptr = this -> m_head;
Noeud<T>* prec = ptr;
while(ptr != 0)
{
prec = ptr;
ptr = ptr -> nextNoeud;
}
prec -> nextNoeud = new Noeud<T>(val);
}
this->m_taille++;
return (*this);
}
};
int main()
{
CPile pile;
CFile file;
CList *ptList = &file;
*ptList < 0 < 1; // empiler deux valeurs dans la file
std::cout << *ptList;
int i;
*ptList > i; // récupérer une valeur de la file dans i
std::cout << *ptList << "i = " << i << std::endl;
ptList = &pile;
*ptList < 0 < 1; // empiler deux valeurs dans la pile
std::cout << *ptList;
*ptList > i; // récupérer une valeur de la pile dans i
std::cout << *ptList << "i = " << i << std::endl;
return 0;
} |
Voici mes erreurs qui sont que dans le main et je vois pas quoi changer, si je précise le type de template par exemple CPile <int> pile cela change rien
Code:
1 2 3 4 5 6 7 8 9 10
|
td4.3.cpp:176:8: error: missing template arguments before pile
td4.3.cpp:176:8: error: expected ; before pile
td4.3.cpp:177:8: error: missing template arguments before file
td4.3.cpp:177:8: error: expected ; before file
td4.3.cpp:179:8: error: missing template arguments before * token
td4.3.cpp:179:9: error: ptList was not declared in this scope
td4.3.cpp:179:19: error: file was not declared in this scope
td4.3.cpp:187:12: error: pile was not declared in this scope
Compilation échouée. |
Ai-je mal écrit mes templates car sans cela fonctionne bien,
Donc si quelqu'un pouvait m'éclaircir je le remercierai grandement