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 :
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.
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
Mon problème est que je ne peut pas instancier une L_List dans une classe. par exemple, si je fais :
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é...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class machin { L_List<int> truc; machin(); };
Bref j'ai fais ça dans machin.cpp:
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...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 machin<int>::machin() { }
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 :
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??????
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.
Merci pour ceux qui pourront m'éclairer.
Partager