Bonjour à tous.
Je suis en train de travailler sur un exercice pour le compte d'un cours de programmation. On me demande de créer une classe Date, puis de l'utiliser dans un Calendrier.
Voici le code épuré de ma classe Calendrier.h
Je vous ai enlevé les fonctions inutiles:
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 //calendar.h #ifndef CALENDAR_H #define CALENDAR_H #include <iostream> #include <map> #include <string> #include "Gregorian.h" namespace Cal { template <class C> // ici C sera de type Cal::Gregorian class Calendar { C today; std::map<std::string, C> theCalendar; public: Calendar() {}; ~Calendar() {}; template <class T> friend std::ostream& operator<<(std::ostream& os, const Calendar<T> &c); std::string print() const; }; template <class C> std::ostream& operator<< (std::ostream& os, const Calendar<C> &c) { os << c.print(); return os; } template <class C> std::string Calendar<C>::print() const { std::string ss; std::map<std::string, C>::iterator map_it; for (it = theCalendar.begin(); it != theCalendar.end(); it++) { ss += (*it).second.print() + " : " + (*it).first.print() + " \n"; } return ss; } } #endif
- une fonction set.date pour donner la date sur laquelle travaille le calendrier // initialise today
- une fonction add.event pour ajouter un élément à la map
- une fonction remove.event pour enlever un élément
Bref, en compilant mon code, j'ai l'erreur suivante :
calendar.h: In member function `std::string Cal::Calendar<C>::print() const':
calendar.h:77: error: expected `;' before "map_it"
calendar.h:78: error: 'it' was not declared in this scope
calendar.h: In member function `std::string Cal::Calendar<C>::print() const [with C = Cal::Gregorian]':
calendar.h:69: instantiated from `std::ostream& Cal::operator<<(std::ostream&, const Cal::Calendar<C>&) [with C = Cal::Gregorian]'
calendarTester.cpp:16: instantiated from here
calendar.h:77: error: dependent-name 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,C,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, C> > >::iterator' is parsed as a non-type, but instantiation yields a type
calendar.h:77: note: say 'typename std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,C,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, C> > >::iterator' if a type is meant
Pourriez-vous m'indiquer où est mon erreur ?
AUTRES QUESTIONS:
Le codage de mon "operator<<" est-il correct ? Le but est de permettre un affichage du calendrier par std::cout << cal où cal est de type Calendar<C> ?
Comment peut-on réorganiser les valeurs d'une map par ordre croissant ou décroissant de valeur de la clé, ou mieux (pour moi) de l'objet auquel la clé correspond ?
Merci d'avance pour votre aide.
Partager