STL find() & erase() < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:21 So 23.06.2013 | Autor: | Mija |
Hallo, ich soll einen Terminkalender erstellen, der mir Termine anzeigen kann, Termine einfügt, löscht usw. Dabei sollen die Termine an sich Vektor von Paaren sein, die aus der Bezeichnung des Termins und dem dazugehörigen Datum bestehen.
Ich soll vector und pair dafür benutzen.
Hier ist meine Header-Datei:
1: | #include <cmath> //vector
| 2: | #include <vector>
| 3: | #include <utility> //pair
| 4: | #include <string>
| 5: | #include "datum.h"
| 6: |
| 7: | #ifndef TERMINKALENDER_H
| 8: | #define TERMINKALENDER_H
| 9: |
| 10: | using namespace std;
| 11: |
| 12: | typedef vector<pair<string,Datum>> VECTOR_PAIR;
| 13: | typedef vector<pair<string,Datum>>::iterator ITERATOR;
| 14: |
| 15: | class Terminkalender {
| 16: |
| 17: | private:
| 18: | VECTOR_PAIR t; //aendern?
| 19: | //PAIR t;
| 20: |
| 21: | public:
| 22: | void zeigeAlle();
| 23: | void vorausschauen();
| 24: | void zeigeTermin();
| 25: | void neuerTermin();
| 26: | void setTermin(string s, Datum d);
| 27: | void loescheTermin();
| 28: | };
| 29: |
| 30: | #endif // TERMINKALENDER_H |
Nun habe ich die Methoden zeigeTermin() und loescheTermin geschrieben, in denen ich allerdings Probleme mit find() und erase() habe.
Ich habe es auch schon mit t.find(t.begin(), t.end(), bez) versucht. Geht leider nicht.
Kann mir jemand sagen, was ich dort falsch gemacht habe?
Hier ist mein Code:
1: | void Terminkalender::zeigeTermin()
| 2: | {
| 3: | string bez;
| 4: | cout << "Bezeichnung: " << endl;
| 5: | cin >> bez;
| 6: |
| 7: | if ( t.find(bez) == t.end() )
| 8: | cout << "Nicht gefunden!" << endl;
| 9: | else
| 10: | cout << (t.find(bez))->second << endl;
| 11: |
| 12: | cout << endl;
| 13: | }
| 14: |
| 15: | void Terminkalender::loescheTermin()
| 16: | {
| 17: | string bez;
| 18: | cout << "Bezeichnung? ";
| 19: | cin >> bez;
| 20: |
| 21: | if (bez.size()) {
| 22: | if (t.erase(bez))
| 23: | cout << "Geloescht: " << bez <<endl;
| 24: | else
| 25: | cout << "Nicht gefunden: " << bez << endl;
| 26: | }
| 27: | } |
Hier sind meine Fehlermeldungen dazu:
Fehler 1 error C2039: 'find': Ist kein Element von 'std::vector<_Ty>'
Fehler 2 error C2039: 'find': Ist kein Element von 'std::vector<_Ty>'
Fehler 3 error C2227: Links von "->second" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
Fehler 4 error C2664: 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::erase(std::_Vector_const_iterator<_Myvec>)': Konvertierung des Parameters 1 von 'std::string' in 'std::_Vector_const_iterator<_Myvec>' nicht möglich
Warnung 5 warning C4996: 'localtime': This function or variable may be unsafe. Consider using [mm] localtime_s [/mm] instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
6 IntelliSense: "class "std::vector<std::pair<std::string, Datum>, std::allocator<std::pair<std::string, Datum>>>"" hat keinen Member ""find"".
7 IntelliSense: "class "std::vector<std::pair<std::string, Datum>, std::allocator<std::pair<std::string, Datum>>>"" hat keinen Member ""find"".
8 IntelliSense: Keine Instanz von Überladene Funktion "std::vector<_Ty, _Ax>::erase [mit _Ty=std::pair<std::string, Datum>, _Ax=std::allocator<std::pair<std::string, Datum>>]" stimmt mit der Argumentliste überein.
9 IntelliSense: Zu wenig Argumente im Funktionsaufruf.
|
|
|
|
Hallo!
find() ist keine direkte Methode der vector-Klasse, sondern das ist in algorithm enthalten. Also: #include <algorithm>, und versuchs nochmal!
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:59 So 23.06.2013 | Autor: | Mija |
Funktioniert leider damit auch nicht.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:43 Mo 24.06.2013 | Autor: | felixf |
Moin!
> Funktioniert leider damit auch nicht.
Auch mit #include <algorithms> kannst du nicht einfach vec.find(...) schreiben. Schau dir mal die Dokumentation zu find() an!
LG Felix
|
|
|
|