C
rafilis1982 schrieb:
Die Klassendefinitionen von Triangle,Edge,Vertex habe ich angegeben, sowie die Methoden und entsprechende Aufrufe.
wo?
Das Objekt was erzeugt wird, ist wie ich bereits sagte ein Objekt vom Typ der Klasse Point.
Macht in meinen Augen keinen Sinn, aber hier geht es uns ja nicht um Semantik (Länge eines Punktes?). Jedenfalls machen die gleichen Funktionsnamen klar, wieso ich verwirrt war, welche Funktion hier welche aufrufen soll.
Was wir somit wissen ist, dass die Definition von Edge::squaredLength auf die Definition von Vertex (und mittelbar Point) angewiesen ist, also nach deren Definition erfolgen muss. Dafür musst du irgendwie sorgen.
Lese ich den ersten Post auf dieser Seite, wird sofort klar, dass hier auch ein Problem mit exzessiven #include besteht.
Edge.h inkludiert vertex.h
vertex.h inkludiert edge.h
das kann offensichtlich nicht gut gehen, jedenfalls hängt die engültige Reihenfolge des Codes dann davon ab, welcher Header in der .cpp-Datei als erstes inkludiert wird.
Der Fakt, dass du sowohl den Header inkludieren willst als auch gleichzeitig Forwarddeklarationen einführst, indiziert, dass diese Problematik noch nicht richtig durchdacht wurde. Grundsätzlich solltest du entweder den Header für eine Klasse einbinden oder eine bloße Forwarddeklaration durchführen (eine 3. Möglichkeit kommt in Frage, falls du Funktionen zwar im Header aber außerhalb der Klassendefinition definierst; dann kann es angezeigt sein, erst eine Forwarddeklaration durchzuführen, dann die Klasse, die definiert werden soll, zu definieren, und dann den Header für die Klasse, die zuvor nur definiert wurde, einzubinden). Beides zu tun, ist im besten Falle überflüssig, im schlechtesten Falle führt es zu zirkulären Abhängigkeiten wie oben.