AGB  ·  Datenschutz  ·  Impressum  







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

TList und Typenumwalndlung

Ein Thema von ozz · begonnen am 17. Nov 2005 · letzter Beitrag vom 18. Nov 2005
Antwort Antwort
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#1

TList und Typenumwalndlung

  Alt 17. Nov 2005, 20:21
Hallo zusammen,
ich habe ein Problem mit TList. Dies ist der erste Versuch, etwas mit Pointern zu arbeiten, aber ich bekomme immer eine Fehler bei TKeywordStats.Get. Ich kann den Pointer nicht zurück in den Type TStats konvertieren
1. Versuch
result:=@FKeywordlist[Index];
2. Versuch
result:=TStats(@FKeywordlist[Index]);


Danke für die Hilfe!



Delphi-Quellcode:
unit CLStats;

interface
uses Classes;

type TStats = record
      Keyword : String;
      Count: Shortint;
end;//Type

type TKeywordStats= class (TComponent)
private
 FKeywordlist:TList;

 function Get(Index: Integer): TStats;
 procedure Put(Index: Integer; const Value: TStats);

public
   constructor Create(AOwner: TComponent);override;
   destructor destroy;override;
   function add(Item:TStats):integer;
   function count :integer;
   property KeywordStats[Index: Integer]: TStats read Get write Put;
end;

implementation

constructor TKeywordStats.create;
begin;
 FKeywordlist:=TList.Create;
 inherited;
end;

destructor TKeywordStats.destroy;
begin;
  FKeywordlist.Destroy;
  inherited destroy;
end;

function TKeywordStats.Add(Item: TStats): Integer;
begin
    Result:=FKeywordlist.add(@Item);
end;

function TKeywordStats.count: Integer;
begin
    Result:=FKeywordlist.count;
end;

function TKeywordStats.Get(Index: Integer):TStats;
var p:TStats;
begin
   result:=FKeywordlist[Index];
end;

procedure TKeywordStats.Put(Index: Integer; const Value: TStats);
begin
    FKeywordlist[Index]:=@Value;
end;

end.
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#2

Re: TList und Typenumwalndlung

  Alt 17. Nov 2005, 21:31
Eigentlich müsste das funktionieren:
Delphi-Quellcode:
function TKeywordStats.Get(Index: Integer):TStats;
var p:TStats;
begin
  p := inherited Items[Index];
  result:=p^;
end;
Alternativ:
Delphi-Quellcode:
type TPStats = ^TStats;

...

function TKeywordStats.Get(Index: Integer):TStats;
var p:TStats;
begin
  result:= TPStats(inherited Items[Index]);
end;
Aber noch was zu deiner Add-Methode:

Du solltest nicht mit dem @-Operator arbeiten. Wenn man deiner Add-Methode ein Element übergibt, das z.B. nur als lokale Variable innerhalb der aufrufenden Prozedur existiert, zeigt dein pointer in der Liste anschließend ins Datennirwana. Erzeug lieber mit New einen neuen Zeiger, von dem weißt du dann garantiert, dass er auf eine "gültige" Speicheradresse verweist.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: TList und Typenumwalndlung

  Alt 17. Nov 2005, 21:36
Hi,
also erstmal muss ich ja mal fragen, warum machst du das mit Pointern? Hat doch eigentlich keine wirklich großartigen Vorteile (wie immer nur subjektive Meinung eines mittlerweile OOP-Freunds).
Aber was tigermann33 gepostet hat, dürfte wohl leider nicht funktionieren, deine Klasse leitet doch nur TComponent ab, nicht TList. Jedenfalls muss dein Zugriff etwas äquivalenter zur Hilfe sein

Delphi-Quellcode:
function TKeywordStats.Get(Index: Integer):TStats;
begin
   result := self.FKeywordlist.Items[Index];
end;
Gruß Der Unwissende
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#4

Re: TList und Typenumwalndlung

  Alt 17. Nov 2005, 21:48
Ups, vollkommen übersehen. Dann geht aber das hier:

Delphi-Quellcode:
type TPStats = ^TStats;

...

function TKeywordStats.Get(Index: Integer):TStats;
var p:TStats;
begin
  result:= TPStats(FKeywordList.Items[Index])^;
end;
@Unwissender:
Das dürfte eigentlich nicht gehen, wegen Typinkompatibilität. FKeywordList.Items[i] ist nämlich vom Typ pointer.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#5

Re: TList und Typenumwalndlung

  Alt 18. Nov 2005, 07:27
Danke für die Hilfe tigerman33 und Der_Unwissende.
@Der_Unwissende
Ich wollte einfach mal mit Pointern arbeiten. Wie ungefähr würdest du es machen?
  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 19:48 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