Bonjour,
je viens ici demander un peu d'aide : je suis en train d'écrire une librairie de classe template, qui permet entre autre de gérer des piles, des files, des listes doublement chaînées... dans un but autodidactique, et je bloque sur ce point :

Soit delement<T> une classe template de gestion des éléments des classes suivantes, dstack<T> une classe template de gestion de l'utilisation de données sous forme de pile, et dlinkedlist<T> une classe template de gestion de liste doublement chainée.

J'en suis arrivé à écrire une fonction dlinkedlist<T>::find qui recherche les éléments de la liste doublement chainée par valeur, en partant du début, et qui ajoute des pointeurs delement<T>* dans un objet dstack<delement<T>*> qui sera ensuite retourné, et la, ça bloque
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Erreur	1	error C2664: 'dstack<T>::push'*: impossible de convertir le paramètre 1 de 'delement<T> *' en 'delement<T> *'
Cette erreur est notée par le compilateur ici, sur la ligne ou j'ai rajouté un #

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
template <class T>
dstack<delement<T>*> dlinkedlist<T>::find(T data, unsigned int n_how)
{
	// buffer stack and current pointer
	dstack<delement<T>*> s;
	delement<T>* p = this->mp_head;
 
	if (!this->mp_tail)		// return an empty stack
		return s;
 
	while(p)
	{
#		s.push(p);
		p = p->next();
	}
 
	return s;
}
Le paramètre n_how n'est pas encore implémenté, pour le moment, la fonction recherche tous les éléments, jusqu'a la fin de la liste

Je met à disposition tous les fichiers sur mon serveur ftp dans un soucis de lisibilité du post.
Les fichiers .inl correspondent à la définition des fonctions des class template. J'ai rajouté un #include "fichier.inl" à la fin du .h pour éviter les erreurs de link si on définit ces fonctions dans un .cpp.

// classe delement<T>
http://ekinai.free.fr/dtl/delement.inl
http://ekinai.free.fr/dtl/delement.h

// classe dstack<T>
http://ekinai.free.fr/dtl/dstack.h
http://ekinai.free.fr/dtl/dstack.inl

// classe dlinkedlist<T>
http://ekinai.free.fr/dtl/dlinkedlist.h
http://ekinai.free.fr/dtl/dlinkedlist.inl

Je dois avouer que ça fait longtemps que je n'ai pas programmé en C++, je me suis replongé très récemment la dedans et c'est la première fois que j'utilise des template.

Je commence à me demander,en fait, s'il est possible de faire ce que je veux faire.

Ai-je fais une erreur de conception ?

Merci d'avance