Thema: Delphi Generics und Vererbung

Einzelnen Beitrag anzeigen

Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Generics und Vererbung

  Alt 31. Aug 2011, 14:49
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.
  Mit Zitat antworten Zitat