Singleton-Muster
-
Aber der Kopierkonstruktor und Zuweisungskonstruktor soll ich in diesem Fall deklarieren und nicht definieren, damit der Compiler nicht zwei eigene erstellt. So steht es in meinem Skript.
Sone hat einen Schritt weiter gedacht.
Weiß einer vllcht. wieso?
Ist das immer noch die Ausgangsfrage, oder wie? Ich weiß nicht, warum Sone sich korrigiert hat, der Standard-ctor ist deklariert und nicht definiert, das ist nach wie vor das Problem. Also Deklaration weglassen oder Constructor auch implementieren.
Falls das nicht die neue Frage ist, gewöhn Dir ganz schnell ab Aussagen wie
irgendwie funktioniert das ganze nicht
zu machen. Handfeste Erklärungen, Fehlermeldungen, Beschreibungen sind angebracht. So was ist für alle Leser und für Dich Zeitverschwendung.
-
Ne, das war wohl von mir wirklich nicht gerade präzise geschrieben; also das Anfangsproblem habe ich hinbekommen. Aber trotzdem funktioniert es nicht so wie soll. Weil in der Funktion hash, wohl nicht die richtigen Werte rauskommen, wie sie sollten. Aber ich probiere das jetzt erstmal alleine weiter. Ansonsten frage ich hier nochmal nach.
Danke für die Hilfe
Aknayirp
-
Du könntest jedoch schauen, ob 2/(I+J) nicht 0 für deinen Fall ergibt. Dann wird der gesamte Summand nämlich null und x ist J. Es wird nicht automatisch zu einem Fließkommawert gecastet. Wenn Du das möchtest, solltest Du zwischendurch ein static_cast<float>(wert) einbauen oder 2.0 bzw. 2.0f statt 2 schreiben.
-
Eisflamme schrieb:
Du könntest jedoch schauen, ob 2/(I+J) nicht 0 für deinen Fall ergibt. Dann wird der gesamte Summand nämlich null und x ist J. Es wird nicht automatisch zu einem Fließkommawert gecastet. Wenn Du das möchtest, solltest Du zwischendurch ein static_cast<float>(wert) einbauen oder 2.0 bzw. 2.0f statt 2 schreiben.
Hat sich erledigt
Aber die 2 war das Problem... Hatte einfach die Formel nicht richtige hingeschrieben. Aber jetzt passt es.
-
Hier aber nicht zu float casten, sondern die Berechnung entsprechend umstellen:
2*(I+J+1)/(I+J)+J(zuerst multiplizieren und dann dividieren)
Generell erscheint mir die Hashfunktion aber sehr eigenartig. Was sollen I und J denn überhaupt darstellen?
-
Th69 schrieb:
Hier aber nicht zu float casten, sondern die Berechnung entsprechend umstellen:
2*(I+J+1)/(I+J)+J(zuerst multiplizieren und dann dividieren)
Generell erscheint mir die Hashfunktion aber sehr eigenartig. Was sollen I und J denn überhaupt darstellen?
Das ist ja auch nicht direkt die Hashfunktion, soweit ich das verstanden habe. Das ist die Cantorische Paarungsfunktion(glaub so heißt es). Aber ja wie gesagt, die zwei war einfach falsch plaziert. Jetzt funktioniert alles richtig.
-
Ich weiß nicht, warum Sone sich korrigiert hat, der Standard-ctor ist deklariert und nicht definiert, das ist nach wie vor das Problem.
Nein nein, ich habe zuerst gedacht, er wollte einfach alle drei Funktionen zur Verfügung stellen. Dann ist mir aufgefallen dass er ja alle private deklariert hat - Singleton...
-
Mal ganz blöd gefragt: Warum den ganzen Aufriss mit der Klasse? Du könntest das auch einfach als Funktion hinschreiben. CDoubleHashing hat ja keine Datenmember.
-
seldon schrieb:
Mal ganz blöd gefragt: Warum den ganzen Aufriss mit der Klasse? Du könntest das auch einfach als Funktion hinschreiben. CDoubleHashing hat ja keine Datenmember.
Soll so gemacht werden, da eine Aufgabe aus der Uni

-
Da sag ich mal besser nichts zu und denke mir nur meinen Teil. Solange du nicht auf die Idee kommst, so was später in Produktionscode machen zu wollen.