j'ai écrit ce quelque chose comme pile structure de données:modèle de pile ne compile pas pousser func
template<class T>
class Stos {
class Element {
public:
T n;
Element* prev;
Element(const T& k = 0): n(k), prev(0) {}
};
Element* member;
Stos(Stos&);
public:
Stos(const T&);
~Stos();
unsigned int count;
T get();
Element* push(const T&);
T pop();
void mod(const T&);
};
et la mise en œuvre (même fichier):
template<class T>
Stos<T>::Stos(const T& n = 0): count(1) {
member = new Element(n);
}
template<class T>
T Stos<T>::get() {
return member->n;
}
template<class T>
Stos<T>::Element* Stos<T>::push(const T& n = 0) {
Element* point = member;
member = new Element;
member->prev = point;
if(n != 0) member->n = n;
++count;
return member;
}
template<class T>
T Stos<T>::pop() {
Element* point = member;
T n = point->n;
member = point->prev;
--count;
delete point;
return n;
}
template<class T>
void Stos<T>::mod(const T& n) {
member->n = n;
}
template<class T>
Stos<T>::~Stos() {
while(member) pop();
}
Et quand je tente de compiler avec g ++, j'obtiens cette erreur sur la première ligne de définition de Stos::Element* Stos::push()
: expected constructor, destructor, or type conversion before ‘*’ token
. C'est mon premier essai d'écrire quelque chose avec des modèles. Ce code de pile a fonctionné sans modèles, quand je l'avais édité, alors j'ai eu l'erreur, tout fonctionnait juste bien avant avec "int" partout au lieu de "T".
Et je ne peux pas savoir pourquoi il ne compile pas. Je ne peux pas utiliser le pointeur sur class :: member?
Merci, cela fonctionne. – silmeth
StackOverflow devrait mettre un automatique "vous avez besoin de nom de type" lorsque la question est étiquetée C++ et "modèle" et "compiler" se trouvent dans le sujet. –
Et même si "porté de VS" est contenu quelque part dans la question :-) – mmmmmmmm