Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"David_pb"«
Hi!
Was mir spontan einfällt:
Initialisierungsliste nutzen
Du könntest ein Sentinelitem verwenden, das verbrät zwar etwas mehr Speicher aber du sparst dir diverse Abfragen
Eine Funktion braucht keinen Rückgabewert wenn er sowiso immer ADDING_SUCCEEDED ist (z.B. Add()).
Ich weiß nicht was hinter PTR_DELETE steckt, aber ein einfaches delete tuts auch!
Die Funktionen welche mit irgendwelches Element/PositionIDs arbeiten sind nicht gerade effizient. Man sollte eher Listeneinträge übergeben. Eine verlinkte Liste arbeitet nunmal nicht mit Indice.
Destruktor wär sinnvoll
Zitat von »"big_muff"«
Ich habs jetzt nur kurz überflogen:
1. SortList() ist als Name ein bisschen verwirrend
2. Ich weiss nicht wie du darauf kommst aber hör mal damit auf jeder Funktion einen Rückgabewert zu geben. Die Add()- oder die SortList()-Funktion können nicht fehlschlagen also kannst du dort den Rückgebewert doch weglassen. Genau so wenig interessiert es jemanden ob die Liste leer wahr wenn er DeleteList() aufruft. Dort kannst du dir den Rückgabewert doch sparen.
3. Der Sinn der Remove()-Funktion ohne Parameter bleibt mir verborgen...
C-/C++-Quelltext |
|
1 2 3 4 5 |
// P U B L I C ######################################### public: // S t a t i c _ M e m b e r _ V a r i a b l e s ### static unsigned long m_ElementCounter; |
C-/C++-Quelltext |
|
1 2 3 4 5 |
int main() { ChainedList::m_ElementCounter = 0; ChainedList *pList; pList = new ChainedList; |
Zitat
error LNK2001: Nicht aufgelöstes externes Symbol ""public: static unsigned long ChainedList::m_ElementCounter" (?m_ElementCounter@ChainedList@@2KA)". Main.obj
C-/C++-Quelltext |
|
1 |
unsigned long ChainedList::m_ElementCounter = 0; |
Zitat von »"$nooc"«
hat ein struct auch so etwas wie einen contructor? ich würde nämlich gerne eine statische membervariable dazu verwenden mir die anzahl der elemente anzugeben.. (aus übungszwecken)
Zitat von »"$nooc"«
will mir evtl. jemand zeigen wie ich den * operator so überladen kann, dass er mir pointer immer sofort auf NULL setzt? also wenn ich schreibe
Zitat von »"David_pb"«
1. Du setzt doch diverse Pointer auf den Wert NULL?!
2. Du hast zu Beginn ein Element das quasi als Wurzelelement fungiert. Dann kannst du dir die Abfragen (ist firstitem = NULL usw) sparen, weil du immer schon ein Item hast.
3. Du solltest deinen Code vllt erstmal planen bevor du anfängst ihn zu schreiben.
4. Das ist absoluter Schwachsinn. Ist ein Zeiger gleich NULL so kann ein delete auf selbigen angewendet werden ohne dass das geringste passiert. Der Standard schreibt vor das delete auf einen Nullzeiger sicher ist!
5. Wenn du per Index auf Items zugreifen willst nutzt du einen vector aber keine verlinkte Liste.
Zitat von »"$nooc"«
will mir evtl. jemand zeigen wie ich den * operator so überladen kann, dass er mir pointer immer sofort auf NULL setzt? also wenn ich schreibe
Das geht nicht.
Zitat von »"$nooc"«
zu 1. macht es einen unterschied ob ich die variablen im contructor auf NULL setze oder in der inti-liste?
Zitat von »"$nooc"«
u 4. wo steht das denn im standard geschrieben? unter welchem punkt? würd mich mal interessieren, ich finde ihn jedenfalls nicht im standard wo sowas steht
If the argument given to a deallocation function in the standard library is a pointer that is not the null pointer value (4.10), the deallocation function shall deallocate the storage referenced by the pointer
Zitat von »"$nooc"«
wenn das übergebene argument/der übergebene parameter kein null pointer ist, dann sollte ("shall") die funktion den speicher freigeben der vom pointer referenziert wird.
Werbeanzeige