Hallo erstmal,
Ich versuche mich seit ca einem halben Jahr an C++/Cli. Im Rahmen meines Fernstudiums habe ich die Aufgabe erhalten, den unten
aufgeführten Code so anzupassen, dass das Listenende nicht immer neu ermittelt werden muss sondern in einem Handle abgespeichert
werden soll. Dieser Handle soll nach dem Anhängen eines neuen Elements dann immer auf das Ende der Liste gesetzt werden.
Hier das Orginal:
Das Listenende soll an die Methode Void listenelement::anhaengen(String ^datenneu) übergeben werden . Und ich schaffe es einfach nicht.
So weit bin ich. Oder besser gesagt, so weit bin ich nicht...
Ich versuche mich seit ca einem halben Jahr an C++/Cli. Im Rahmen meines Fernstudiums habe ich die Aufgabe erhalten, den unten
aufgeführten Code so anzupassen, dass das Listenende nicht immer neu ermittelt werden muss sondern in einem Handle abgespeichert
werden soll. Dieser Handle soll nach dem Anhängen eines neuen Elements dann immer auf das Ende der Liste gesetzt werden.
Hier das Orginal:
C:
/* +++++++++++++++++++++++++++++++++++++++++++++
Verkette Liste C++ CLI mit Objekten
++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
Void datenSetzen(String ^datenneu);
Void anhaengen(String ^datenneu);
Void ausgeben();
};
//die Zeichenkette in das Element schreiben
Void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste anhängen
Void listenelement::anhaengen(String ^datenneu) {
//hat next den Wert nullptr?
//dann ein neues Element anhängen
if (next == nullptr) {
next = gcnew listenelement;
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
}
//sonst die Methode für next noch einmal aufrufen
else
next->anhaengen(datenneu);
//nur zur Veranschaulichung
Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
}
//Alle Elemente der Liste ausgeben
Void listenelement::ausgeben() {
//den ersten Eintrag ausgeben
Console::WriteLine("{0}",daten);
//wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
if (next != nullptr)
next->ausgeben();
}
int main(array<System::String ^> ^args)
{
//Handle auf den Anfang der Liste
listenelement ^listenanfang;
//das erste Element per Hand erzeugen
listenanfang = gcnew listenelement;
//Zeichenkette in das erste Element schreiben
listenanfang->datenSetzen("Element 1");
//in einer Schleife mehrere Elemente anfügen
for (Int32 schleife=2;schleife<4;schleife++)
listenanfang->anhaengen("Element "+schleife);
//die Liste ausgeben
listenanfang->ausgeben();
return 0;
}
Das Listenende soll an die Methode Void listenelement::anhaengen(String ^datenneu) übergeben werden . Und ich schaffe es einfach nicht.
So weit bin ich. Oder besser gesagt, so weit bin ich nicht...
C:
/* ########################################################
Einsendeaufgabe 6.2
##########################################################*/
#include "stdafx.h"
using namespace System;
ref class listenelement {
String ^daten;
listenelement ^next;
public:
Void datenSetzen(String ^datenneu);
Void anhaengen(String ^datenneu);
Void ausgeben();
};
//die Zeichenkette in das Element schreiben
Void listenelement::datenSetzen(String ^datenneu) {
daten=datenneu;
}
//neues Element am Ende der Liste anhängen
Void listenelement::anhaengen(String ^datenneu) {
//hat next den Wert nullptr?
//dann ein neues Element anhängen
if (next == nullptr) {
next = gcnew listenelement;
next->daten=datenneu;
//nullptr wird automatisch zugewiesen!
}
//sonst die Methode für next noch einmal aufrufen
else
next->anhaengen(datenneu);
//nur zur Veranschaulichung
Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
}
//Alle Elemente der Liste ausgeben
Void listenelement::ausgeben() {
//den ersten Eintrag ausgeben
Console::WriteLine("{0}",daten);
//wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
if (next != nullptr)
next->ausgeben();
}
int main(array<System::String ^> ^args)
{
//Handle auf den Anfang der Liste
listenelement ^listenanfang;
listenelement ^listenende; //Zeiger der immer auf das Listenende zeigen soll
//das erste Element per Hand erzeugen
listenanfang = gcnew listenelement;
//Zeichenkette in das erste Element schreiben
listenanfang->datenSetzen("Element 1");
listenende = listenanfang; //listenende wir auf Listenanfang gesetzt
//in einer Schleife mehrere Elemente anfügen
for (Int32 schleife=2;schleife<4;schleife++)
listenende->anhaengen("Element "+schleife);
/*Hier ist der Punkt wo ich das Listenende für die zuletzt erzeugte Instanz aus der
Methode Void listenelement::anhaengen(String ^datenneu)übergeben wollte... - Ohne Erfolg*/
//die Liste ausgeben
listenanfang->ausgeben();
return 0;
}
Zuletzt bearbeitet von einem Moderator: