Zeilen und Spaltenvektor transponieren -> zyklische Abhängigkeit
-
Hi,
ich habe hier eine Klasse columnvector4, die ein Spaltenvektor ist. Kennt man ja vielleicht aus der Oberstufe oder Höherer Mathematik 1
Und dann gibt es die Klasse rowvector4, die ein Zeilenvektor ist.
Nun kanm ich auf die glorreiche Idee, in beide Klassen Member-Funktionen namens transpose() einzuführen, die jeweils den anderen Vektor zurückliefern. tolle Sache, aber dadurch entsteht mir eine zyklische Abhängigkeit.
columnvector4 kann nur einen rowvector4 zurückliefern, wenn ersterer bereits definiert ist. Ebenso für rowvector4, für dessen Transpose der columnvector4 bereits definiert sein muss.
Durch blosse Vorwärtsdeklaration der jeweils anderen Klasse kann ich das nicht lösen, da ich jeweils mindestens das Layout der Klasse sowie einen Konstruktor brauche.
Wie kann ich also dieses Konundrum auflösen?
-
Du kannst etwas, dass noch nicht definiert ist zurückgeben. Du musst einfach darauf achten, dass du die Implementierung erst in der .cpp benutzt, da es ansonsten wirklich zu einem Problem kommt.
Ansonsten kannst du zurückgeben und übergeben, wie du willst ohne die genaue Definition zu kennen.
-
1. Die Deklarationen der Klassen columnvector4, rowvector4 hängen nicht von anderen Deklarationen ab.
2. Die Deklarationen der transpose-Memberfunktionen benötigen die Deklarationen der jeweils anderen Klasse.
3. Die Definitionen der transpose-Memberfunktionen benötigen die Definitionen der jeweils anderen Klasse.
4. Die Definitionen der Klassen hängen von der Definition der anderen Klasse ab, sofern die transpose-Memberfunktion in der Klassendefinition definiert wird, sonst nur von der Deklaration der anderen Klasse.
==> solange die Memberfunktionen nicht in der Klassendefinition definiert werden, besteht keine zyklische Abhängigkeit.
-
Danke nochmals.
20 Minuten nachdem ich die Sache gepostet hatte, kam ich selbst auf die Lösung.
Meine Vektorklassen sind komplett in einem .h File definiert (es gibt kein .cpp), da es sich um einfach Utility Klassen handelt.
Ich konnte allerdings die Implementierung der transpose funktion der zuerst definierten Klasse hinter die Deklaration der zweiten Klasse verschieben.
Ob sich jetzt ein Linker-Problem ergibt, wenn ich das Include File von mehreren .cpp Files aus anwende, wird sich noch zeigen.
Christian