Delphi-Quellcode:
TBasicGraph<E, V> = class
private
FEdges: TBasicEdgeList<E, V, TBasicEdge<E, V>>;
Genau so habe ich es auch versucht. Die Fehlermeldung die ich dabei bekomme ist schon fast sehenswert:
"[DCC Fehler] GenericGraph.BasicGraph.pas(92): E2010 Inkompatible Typen: 'GenericGraph.Global.TBasicEdgeList<GenericGraph.B asicGraph.TBasicGraph<E,V>.E,GenericGraph.BasicGra ph.TBasicGraph<E,V>.V,GenericGraph.Global.TBasicEd ge<GenericGraph.BasicGraph.TBasicGraph<E,V>.E,Gene ricGraph.BasicGraph.TBasicGraph<E,V>.V>>' und 'GenericGraph.Global.TDirectedEdgeList<GenericGrap h.BasicGraph.TBasicGraph<E,V>.E,GenericGraph.Basic Graph.TBasicGraph<E,V>.V>'"
Ich versuche nochmal den Quelltext etwas strukturierter zusammenzuschreiben:
Delphi-Quellcode:
{ Elternklasse für alle Kanten }
TBasicEdge<T, V> = class
{...}
end;
{ Kanten für gerichtete Graphen}
TDirectedEdge<T, V> = class(TBasicEdge<T, V>)
{...}
end;
{ Kanten für ungerichtete Graphen }
TEdge<T, V> = class(TBasicEdge<T, V>)
{...}
end;
Für die jeweiligen Graphenklassen
TDirectedGraph<E, V>
und
TUndirectedGraph<E, V>
wollte ich eine gemeinsame Oberklasse
TBasicGraph<E, V>
einführen, weil die ja ziemlich viel gemeinsam haben. Diese sollte
TBasicGraph<E, V>
heißen. Die Kanten selbst werden in einer einfachen Liste verwaltet. Das waren bisher die Typen
TDirectedEdgeList<T,V>
und
TEdgeList<,V>
. In der Elternklasse
TBasicGraph<E, V>
muss ich diese Liste jetzt irgendwo als privates Attribut anlegen, erstellen, usw.
Das sieht im Moment so aus:
Delphi-Quellcode:
TBasicGraph<E, V> = class
private
FEdges: TBasicEdgeList<E, V, TBasicEdge<E, V>>;
{...}
Wenn ich jetzt versuche, FEdges mit einem konkreten Typen zu erstellen
FEdges := TDirectedEdgeList<E, V>.Create()
bekomme ich diese nette und übersichtliche Fehlermeldung von oben.