AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [gelöst] integer <> integer bei TObjectList.Last?
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] integer <> integer bei TObjectList.Last?

Ein Thema von silver-moon-2000 · begonnen am 19. Jan 2014 · letzter Beitrag vom 19. Jan 2014
Antwort Antwort
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

[gelöst] integer <> integer bei TObjectList.Last?

  Alt 19. Jan 2014, 19:29
Delphi-Version: XE
Hallo und Entschuldigung für den kryptischen Titel, mir ist nichts Besseres eingefallen.

Vielleicht gibt es eine einfache Lösung für meine Problem, vielleicht bin ich auch momentan nur blind?

Ich versuche, mittels TryStrToInt einen string in einen integer zu wandeln
Delphi-Quellcode:
const
  ITEMSHEET_COLUMN_ITEMID = 1;
var
  id, startRow, row : Integer;
[...]
FItems.Add(TItemPriceInfo.Create);
TryStrToInt(_data[startRow + row, ITEMSHEET_COLUMN_ITEMID - 1], id); //<-----
FItems.Last.itemID := id;//<-----
funktioniert auch wunderbar. Das hier
TryStrToInt(_data[startRow + row, ITEMSHEET_COLUMN_ITEMID - 1], FItems.Last.itemID); //<----- aber wirft mir einen Fehler um die Ohren!

Dabei habe ich verwendet:
Delphi-Quellcode:
type TItemPriceInfo = class(TObject)
  private
    FItemID : Integer;
    [...]
  public
    [...]
    property itemID : Integer read FItemID write FItemID;
end;


type TStringMatrix = array of array of string;
var _data : TStringMatrix;


FItems : TObjectList<TItemPriceInfo>;
Der Fehler lautet:
Zitat:
E2250 There is no overloaded version of 'TryStrToInt' that can be called with these arguments
Und das wundert mich doch ein wenig.
Die Umwandlung über eine Zwischenvariable klappt, die direkte Zuweisung nicht...

kann mir das einer erklären? Was habe ich übersehen?
Tobias
Bitte nicht hauen , ich weiß es nicht besser

Geändert von silver-moon-2000 (19. Jan 2014 um 20:18 Uhr) Grund: Problem und Fragestellung gelöst
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: integer <> integer bei TObjectList.Last?

  Alt 19. Jan 2014, 19:34
Der letzte Parameter ist ein var-Parameter. Da kannst du nur eine Variable und keine Property angeben.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: integer <> integer bei TObjectList.Last?

  Alt 19. Jan 2014, 19:47
Stell dir vor, als wenn Property immer einen Getter und Setter hätten und schon fällt einem auf, warum man dieses nicht als Var-Parameter nutzen kann.

Wenn du an der Stelle auf das interne FItems.Last.FItemID Zugriff hast, dann würde es funktionieren.


Und warum verwendest du eigentlich TryStrToInt, wenn du den Rückgabewert nichtmal benutzt?
Da kannst du auch gleich StrToIntDef verwenden und hättest da im Fehlerfall wenigstens keinen Zufallswert.
Außerdem kannst du das direkt an dein Property übergeben (genauer würde es direkt an den Setter weitergeleitet).
$2B or not $2B
  Mit Zitat antworten Zitat
silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#4

AW: integer <> integer bei TObjectList.Last?

  Alt 19. Jan 2014, 20:17
Der letzte Parameter ist ein var-Parameter. Da kannst du nur eine Variable und keine Property angeben.
Stell dir vor, als wenn Property immer einen Getter und Setter hätten und schon fällt einem auf, warum man dieses nicht als Var-Parameter nutzen kann.

Wenn du an der Stelle auf das interne FItems.Last.FItemID Zugriff hast, dann würde es funktionieren.
Ah, jetzt ja, eine Insel [im Meer des Unverständnisses]. Verstanden, danke.

Und warum verwendest du eigentlich TryStrToInt, wenn du den Rückgabewert nichtmal benutzt?
Da kannst du auch gleich StrToIntDef verwenden und hättest da im Fehlerfall wenigstens keinen Zufallswert.
Außerdem kannst du das direkt an dein Property übergeben (genauer würde es direkt an den Setter weitergeleitet).
Die Zufallswerte hatte ich schon ausgeschlossen über:
Delphi-Quellcode:
id := -1;
TryStrToInt(..., id);
Fitems.Last.FItemID := id;
Dass es da StrToIntDef gibt, habe ich irgendwie ganz vergessen. Danke für die Erinnerung.
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: integer <> integer bei TObjectList.Last?

  Alt 19. Jan 2014, 20:30
Dann verlässt du dich aber auf die Implementierung vom TryStrToInt, welcher auch bei einem Fehler 'ne halbe Zahl im Result haben könnte.

Das Result solcher Funktionen besagt grundsätzlich erstmal nur, daß bei TRUE der Rückgabewert "gültig" ist.
Ob bei FALSE der Wert unverändert oder sonstwas enthält, ist nicht definiert.

Zitat:
Delphi-Quellcode:
id := -1;
TryStrToInt(..., id);
Also doch StrToIntDef

FItems.Last.ItemID := StrToIntDef(..., -1);
$2B or not $2B

Geändert von himitsu (19. Jan 2014 um 20:50 Uhr)
  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 05:22 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