Bonjour, excusez moi de rabaisser le niveau du forum à chaque fois lol mais j'ai un problème de compréhension de template, et vu que je sis autodidacte ma seul base est le livre de stroustrup, quand j'ai le temps parcequ'en fait j'ai un projet à rendre pour vendredi et ca me laisse pas le temps de commencer à apprendre vraiement... Méthode stupide de mon école d'ailleurs....
Bref, je pense que je suis obligé de balancer le code, je ne balance pas l'implémentation, juste le .h, car je pense que c'est la construction du template qui pose problème, mais en procédant par élimination de mes méthodes et attributs je n'ai pas sus comprendre le(s) problème(s). D'abord le .h ensuite je vous dis mes nombreux malheurs assoicés à ma classe template. C'est une liste chaînée toute bête :
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
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
#ifndef HR_L_List_H
#define HR_L_List_H
 
#include <stdarg.h>
 
//!A Linked List which can store (append, insert and delete) elements with value and retrieve their.
template<class C> class L_List
{
private:
	//!True if it is the first element of a LikedList else false
	bool			IsFirst_B;
 
	//!Value of the element of the L_List
	C				Value;
 
	//!Pointer to the next element in the L_List
	L_List*		Next;
 
	//!Private Constructor to build other L_List than first
	L_List(int _num,bool _internalCall);
 
	//Delete _number elements from index _firstIndex.
	/*!
                This function is added to be able to calculate Length in DeleteElements(int,int)
        */
	void ReallyDeleteElements(int _firstIndex, int _number);
	void AppendValueWithLength(int _index,C _value);
	unsigned int Length;
public:
	//!Default Constructor
	L_List(int _num);
 
	//!Add a new element to the end of the list with value _value
	void AppendValue(C _value);
 
	//!Add _num new elements to the end of the list with values ...
	void AppendValues(int _num,...);
 
	//!Insert new element after element with value _value _prevIndex of the list
	void InsertElement(int _nextIndex,C _value);
 
	//!Set the value of element _index to _value
	void SetElement(int _index,C _value);
 
	//!Return the element _index value
	C GetElement(int _index);
 
	//Delete _number elements from index _firstIndex
	bool DeleteElements(int _firstIndex,int _number);
 
	//!Swap the value of elements _index1 and _index2
	void Swap(int _index1,int _index2);
 
	//!Return the number of elements of the Linked List
	unsigned int GetLength();
 
	~L_List();
};
 
#endif
Je sais que j'aurais pu utiliser la stl mais j'ai pas encore eu le temps de la tester et je suis obligé en plus de faire chez moi ce qu'on devrais faire en cours : apprendre. Donc j'ai voulu essayer les template avec une liste chaînée pour apprendre plusieurs chose en une.
Mon problème est que je ne peut pas instancier une L_List dans une classe. par exemple, si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
class machin
{
	L_List<int> truc;
	machin();
};
il me dis que mon constructeur dans le .cpp de la classe machin n'est pas correct. Je ne me rappel plus de l'erreur exacte vu que mon .dsp et .dsw sont corrompus il faut que je refasse un projet et remette tous dedans, j'ai pas eu le temps et je sui préssé...
Bref j'ai fais ça dans machin.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
machin<int>::machin()
{
 
}
Et là j'ai une autre erreur (vraiment dsl de ne pas donné plus de détail j'avais pas prévu que mon fichier serait corrompu...)

Pourtant j'ai pas de problemes dans ma classe machin si je lui met seulement en attribut un template avec 1 attribut (même un pointeur) et une ou deux méthodes intutile (print ou autre chose), je comprends pas....

Je ne sais pas coment faire, j'ai un autre problème, à un moment j'utilise L_List pour stocker des objets2D (en openGL des objets collé à la camera en gros) et dans c'est objets 2D il y a plusieurs pointeurs parceque je veux pas créeer plusieurs materiaux par exemple ou plusieurs font pour rien donc dans la classe Objet2D il y a un pointeur sur un matériau et un sur une font (pour du texte). Quand je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
List<Objet2D> objs; //Je cré une liste d'Objet2D
objs.GetElement(1).Material_Mat=new Material();//GetElement(1) recupere le second element de la liste d'Objet2D et Material_Mat c'est mon material.
Il me dis que objs.GetElement(1).Material_Mat n'est pas une lvalue, et ce pour tout acces a un pointeur dans un element d'une Liste L_List. Je ne comprend pas, un pointeur est forcement une lvalue il me semble??????
Merci pour ceux qui pourront m'éclairer.