Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inkompatible Typen 'TItem' und '...' ? (https://www.delphipraxis.net/171598-inkompatible-typen-titem-und.html)

Kudle 14. Nov 2012 13:48

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:
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.
Könnt ihr mir weiterhelfen? :)

Nersgatt 14. Nov 2012 13:51

AW: Inkompatible Typen 'TItem' und '...' ?
 
Vermutlich erwartet die Funktion TBinarySearchTree.Search als Argument ein TItem, statt eines TZeichnenzahl.

mkinzler 14. Nov 2012 13:55

AW: Inkompatible Typen 'TItem' und '...' ?
 
TZeichenzahl von TItem ableiten

Kudle 14. Nov 2012 13:58

AW: Inkompatible Typen 'TItem' und '...' ?
 
Zitat:

Zitat von mkinzler (Beitrag 1191133)
TZeichenzahl von TItem ableiten

Aber TZeichenzahl ist von der Klasse TItem

Klaus01 14. Nov 2012 14:12

AW: Inkompatible Typen 'TItem' und '...' ?
 
Hallo,

Deine Klasse:
Delphi-Quellcode:
type
  TZeichenzaehler = class
    private
      Zeichenliste: TListe;
      Zeichenzahlbaum: TBinarySearchTree;
      procedure sortierteListe(pSuchbaum: TBinarySearchTree);
    public
      constructor create; virtual;
      procedure zaehleZeichen(pText: string);
      function gibSortierteZeichenliste: TListe;
  end;
die Implemtierung der Methode:
Delphi-Quellcode:
procedure TZeichenanzahl.sortierteListe(pSuchbaum: TBinarySearchTree);
begin
{
  if not pSuchbaum.isEmpty
    then begin
                sortierteListe(pSuchbaum.getLefttree);
            Zeichenliste.Append(pSuchbaum.getItem);
            sortierteListe(pSuchbaum.getRighttree)
              end; }
end;
Zeichenanzahl != Zeichenzaehler.

Grüße
Klaus

himitsu 14. Nov 2012 14:12

AW: Inkompatible Typen 'TItem' und '...' ?
 
Zitat:

Zitat von Kudle (Beitrag 1191129)
"[Fehler] mZeichenzaehler.pas(39): Inkompatible Typen: 'TItem' und 'TZeichenZahl'"

Man hätte natürlich auch mal erwähnen können, welche Zeile das sein soll ... ich hab doch keine Lust erst nachzuzählen :wall:


Zitat:

TZeichenzahl(Zeichenzahlbaum.search(NeueZeichenzahl));
Außerdem fehlen wieder mal die wichtigsten Informationen.
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)

Kudle 14. Nov 2012 14:28

AW: Inkompatible Typen 'TItem' und '...' ?
 
Zitat:

Zeichenanzahl != Zeichenzaehler.
Entschuldige, das lag noch daran, dass ich diese Methoden aus einer anderen Unit kopiert habe.

Zitat:

Wenn du schon wegen TZeichenzahl Probleme hast, warum wird dessen deklaration nicht gezeigt?
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:

Und was ist Zeichenzahlbaum, bzw. TBinarySearchTree und was gibt search zurück. (ich hoffe mal das sollte die Zeile 39 sein)
Ja es handelt sich um diese Zeile (mit search), entschuldige, dass ich das nicht markiert habe.

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;

nuclearping 14. Nov 2012 14:34

AW: Inkompatible Typen 'TItem' und '...' ?
 
Und wo rufst du TBinarySearchTree.search wie mit welchen Paramtern auf? Davon hast du uns auch nix gezeigt.

Kudle 14. Nov 2012 14:38

AW: Inkompatible Typen 'TItem' und '...' ?
 
Siehe oben.

AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(NeueZeichenzah l));

beim Zeichen zählen.

nuclearping 14. Nov 2012 15:46

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:
AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(TItem(NeueZeichenzahl)));
sollte es eigentlich klappen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz