AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Inkompatible Typen 'TItem' und '...' ?

Ein Thema von Kudle · begonnen am 14. Nov 2012 · letzter Beitrag vom 14. Nov 2012
Antwort Antwort
Kudle

Registriert seit: 31. Okt 2010
14 Beiträge
 
#1

Inkompatible Typen 'TItem' und '...' ?

  Alt 14. Nov 2012, 14:48
Delphi-Version: 7
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?
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

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

  Alt 14. Nov 2012, 14:51
Vermutlich erwartet die Funktion TBinarySearchTree.Search als Argument ein TItem, statt eines TZeichnenzahl.
Jens
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 14. Nov 2012, 14:55
TZeichenzahl von TItem ableiten
Markus Kinzler
  Mit Zitat antworten Zitat
Kudle

Registriert seit: 31. Okt 2010
14 Beiträge
 
#4

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

  Alt 14. Nov 2012, 14:58
TZeichenzahl von TItem ableiten
Aber TZeichenzahl ist von der Klasse TItem

Geändert von Kudle (14. Nov 2012 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 14. Nov 2012, 15:12
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 14. Nov 2012, 15:12
"[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


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)
$2B or not $2B
  Mit Zitat antworten Zitat
Kudle

Registriert seit: 31. Okt 2010
14 Beiträge
 
#7

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

  Alt 14. Nov 2012, 15:28
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;
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

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

  Alt 14. Nov 2012, 15:34
Und wo rufst du TBinarySearchTree.search wie mit welchen Paramtern auf? Davon hast du uns auch nix gezeigt.
  Mit Zitat antworten Zitat
Kudle

Registriert seit: 31. Okt 2010
14 Beiträge
 
#9

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

  Alt 14. Nov 2012, 15:38
Siehe oben.

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

beim Zeichen zählen.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

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

  Alt 14. Nov 2012, 16:46
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 AlteZeichenZahl := TZeichenzahl(Zeichenzahlbaum.search(TItem(NeueZeichenzahl))); sollte es eigentlich klappen?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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