Klasse Vektor: erase() < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:41 So 23.06.2013 | Autor: | Mija |
Aufgabe | Definieren Sie eine Template-Klasse Vektor, die ein dynamisches Array für verschiedene Datentypen verwaltet. |
Hallo, meine Template-Klasse Vektor soll unter anderem die Methode erase() enthalten. Diese löscht alle Elemente des Arrays. Danach soll der Vektor die Grüße 0 haben.
Ich habe einmal versucht diese zu schreiben (habe gelesen, dass dies mit clear() geht). Leider funktioniert es noch nicht (auch nicht das in den Kommentarzeilen).
Kann mir bitte jemand beim Verbessern helfen?
Hier ist meine Methode:
1: | //loescht alle Elemente des Arrays. Danach hat der Vektor die Groesse 0
| 2: | template <class T>
| 3: | void Vektor<T>::erase()
| 4: | {
| 5: | T* vektor_neu = new T[dim+1];
| 6: | for (int i=0; i<dim; i++)
| 7: | vektor_neu[i] = vektor[i];
| 8: | vektor_neu->clear();
| 9: |
| 10: | //delete[] vektor;
| 11: |
| 12: |
| 13: | //for (int i=0; i<dim; i++)
| 14: | // delete vektor[i];
| 15: |
| 16: | //if (vektor->size()==0)
| 17: | // cout << "Test bestanden." << endl;
| 18: |
| 19: | } |
Hier ist die Fehlermeldung:
Fehler 3 error C2227: Links von "->clear" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
Für das in den Kommentarzeilen bekomme ich folgende Fehlermeldungen:
Fehler 3 error C2541: 'delete': Objekte, die keine Zeiger sind, können nicht gelöscht werden
Fehler 4 error C2227: Links von "->size" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
Was mache ich falsch? Was kann ich wie ändern?
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:47 Mo 24.06.2013 | Autor: | felixf |
Moin!
> Definieren Sie eine Template-Klasse Vektor, die ein
> dynamisches Array für verschiedene Datentypen verwaltet.
>
> Hallo, meine Template-Klasse Vektor soll unter anderem die
> Methode erase() enthalten. Diese löscht alle Elemente des
> Arrays. Danach soll der Vektor die Grüße 0 haben.
Wie sieht denn der Rest deines Vektor<>-Templates aus?
> Ich habe einmal versucht diese zu schreiben (habe gelesen,
> dass dies mit clear() geht). Leider funktioniert es noch
> nicht (auch nicht das in den Kommentarzeilen).
clear() ist eine Methode von std::vector<>. Die wird dir hier nicht weiterhelfen, es sei denn du verwendest intern ein Objekt vom Typ std::vector<T> um die Elemente zu speichern. Was sicher nicht der Sinn dieser Uebung waere.
> Kann mir bitte jemand beim Verbessern helfen?
>
> Hier ist meine Methode:
Wenn die Methode alle Elemente loeschen soll, warum legt sie dann erst ein neues Array an und fuellt dieses mit Werten? Da stimmt doch was nicht!
Wie genau speicherst du die Elemente deines Vektors? Mit einem Zeiger auf T*? Und allokierst du speicher mit new[], und gibst ihn mit delete[] frei? Wie repraesentierst du einen Vektor der Laenge 0?
LG Felix
|
|
|
|