![]() |
Delphi-Version: 7
Inkompatible Typen 'TItem' und '...' ?
Hallo Leute,
ich schaffe es nicht folgende Fehlermeldung zu beheben: "[Fehler] mZeichenzaehler.pas(39): Inkompatible Typen: 'TItem' und 'TZeichenZahl'"
Delphi-Quellcode:
Könnt ihr mir weiterhelfen? :)
unit mZeichenzaehler;
interface uses mListenstruktur, mBinarySearchTree, mZeichenzahl; type TZeichenzaehler = class private Zeichenliste: TListe; Zeichenzahlbaum: TBinarySearchTree; procedure sortierteListe(pSuchbaum: TBinarySearchTree); public constructor create; virtual; procedure zaehleZeichen(pText: string); function gibSortierteZeichenliste: TListe; end; implementation constructor TZeichenzaehler.create; begin inherited create; Zeichenzahlbaum := TBinarySearchTree.create; Zeichenliste.Create end; procedure TZeichenzaehler.zaehleZeichen(pText: string); var Zeichen: char; i: integer; NeueZeichenzahl,AlteZeichenZahl: TZeichenzahl; begin Zeichenzahlbaum := TBinarySearchTree.create; for i := 1 to length(pText) do begin Zeichen := pText[i]; NeueZeichenzahl := TZeichenzahl.create(Zeichen); AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(NeueZeichenzahl)); if AlteZeichenZahl = nil then Zeichenzahlbaum.insert(NeueZeichenzahl) else AlteZeichenZahl.erhoeheAnzahl; end; end; procedure TZeichenanzahl.sortierteListe(pSuchbaum: TBinarySearchTree); begin { if not pSuchbaum.isEmpty then begin sortierteListe(pSuchbaum.getLefttree); Zeichenliste.Append(pSuchbaum.getItem); sortierteListe(pSuchbaum.getRighttree) end; } end; function TZeichenanzahl.gibSortierteZeichenliste: TListe; begin //Result := Zeichenzahlbaum.getSortedList; end; end. |
AW: Inkompatible Typen 'TItem' und '...' ?
Vermutlich erwartet die Funktion TBinarySearchTree.Search als Argument ein TItem, statt eines TZeichnenzahl.
|
AW: Inkompatible Typen 'TItem' und '...' ?
TZeichenzahl von TItem ableiten
|
AW: Inkompatible Typen 'TItem' und '...' ?
Zitat:
|
AW: Inkompatible Typen 'TItem' und '...' ?
Hallo,
Deine Klasse:
Delphi-Quellcode:
die Implemtierung der Methode:
type
TZeichenzaehler = class private Zeichenliste: TListe; Zeichenzahlbaum: TBinarySearchTree; procedure sortierteListe(pSuchbaum: TBinarySearchTree); public constructor create; virtual; procedure zaehleZeichen(pText: string); function gibSortierteZeichenliste: TListe; end;
Delphi-Quellcode:
Zeichenanzahl != Zeichenzaehler.
procedure TZeichenanzahl.sortierteListe(pSuchbaum: TBinarySearchTree);
begin { if not pSuchbaum.isEmpty then begin sortierteListe(pSuchbaum.getLefttree); Zeichenliste.Append(pSuchbaum.getItem); sortierteListe(pSuchbaum.getRighttree) end; } end; Grüße Klaus |
AW: Inkompatible Typen 'TItem' und '...' ?
Zitat:
Zitat:
Wenn du schon wegen TZeichenzahl Probleme hast, warum wird dessen deklaration nicht gezeigt? Und was ist Zeichenzahlbaum, bzw. TBinarySearchTree und was gibt search zurück. (ich hoffe mal das sollte die Zeile 39 sein) |
AW: Inkompatible Typen 'TItem' und '...' ?
Zitat:
Zitat:
Delphi-Quellcode:
unit mZeichenZahl;
interface uses mItem; type TZeichenZahl = class(TItem) private fZeichen : char; fZahl : integer; public constructor create (pZeichen: char); virtual; procedure ErhoeheAnzahl; virtual; function GetZahl : integer; virtual; function GetZeichen : char; virtual; function isEqual (pItem: TItem) : boolean; override; function isGreater (pItem: TItem) : boolean; override; function isLess (pItem: TItem) : boolean; override; destructor destroy; override; end; implementation constructor TZeichenZahl.create(pZeichen: char); begin inherited create; fZeichen := pZeichen; fZahl := 1; end; procedure TZeichenZahl.ErhoeheAnzahl; begin fZahl := fZahl + 1; end; function TZeichenZahl.GetZahl : integer; begin result := fZahl end; function TZeichenZahl.GetZeichen : char; begin result := fZeichen end; function TZeichenZahl.isEqual (pItem: TItem) : boolean; begin Result := Self.GetZeichen = TZeichenZahl(pItem).GetZeichen end; function TZeichenZahl.isGreater (pItem: TItem) : boolean; begin Result := Self.GetZeichen > TZeichenZahl(pItem).GetZeichen end; function TZeichenZahl.isLess (pItem: TItem) : boolean; begin Result := Self.GetZeichen < TZeichenZahl(pItem).GetZeichen end; destructor TZeichenZahl.destroy; begin inherited destroy end; end. Zitat:
Die Search-Methode sieht wie folgt aus:
Delphi-Quellcode:
function TBinarySearchTree.search(pItem: TItem): TItem;
var lItem: TItem; begin if binaryTree.isEmpty or (pItem = nil) then result := nil else begin lItem := TItem(binaryTree.getObject); if pItem.isLess(lItem) then result := self.getLeftTree.search(pItem) else if pItem.isGreater(lItem) then result:=self.getRightTree.search(pItem) else result:=lItem; end; end; |
AW: Inkompatible Typen 'TItem' und '...' ?
Und wo rufst du TBinarySearchTree.search wie mit welchen Paramtern auf? Davon hast du uns auch nix gezeigt.
|
AW: Inkompatible Typen 'TItem' und '...' ?
Siehe oben.
AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(NeueZeichenzah l)); beim Zeichen zählen. |
AW: Inkompatible Typen 'TItem' und '...' ?
Ja, dann hat der Compiler schon recht. Er erwartet TItem und du übergibst TZeichenZahl. Und das passt ihm nicht, obwohl TZeichenZahl ein Nachfahre von TItem ist.
Mit
Delphi-Quellcode:
sollte es eigentlich klappen?
AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(TItem(NeueZeichenzahl)));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz