Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi var in functions deklaration funktionükelt nicht (https://www.delphipraxis.net/72036-var-functions-deklaration-funktionuekelt-nicht.html)

Green 24. Jun 2006 10:51


var in functions deklaration funktionükelt nicht
 
also ich habe eine function folgendermassen deklariert:
Delphi-Quellcode:
function CountStrg(Start: integer; var Text: string): integer;
wenn ich die jetzt so aufrufe:
Delphi-Quellcode:
CountStrg(2, TEdit(Sender).Text);
dann kommt ein fehler, und zwar folgender:
Zitat:

[Fehler] Unit1.pas(362): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
kann mir jemand sagen was ich falsch mach???
ich versteh die welt grad nich mehr...

Dax 24. Jun 2006 10:55

Re: var in functions deklaration funktionükelt nicht
 
Ja: du musst den Text erst in eine Variable speichern, bevor du den der Funktion übergeben kannst, und dann wieder dem Edit zuweisen. Denn: die Property des ist keine Variable, sondern das sind eine Prozedur und eine Funktion in einen Namen zusammengepackt! Und Funktionen liefern nun mal Konstante Werte zurück :)

Green 24. Jun 2006 11:01

Re: var in functions deklaration funktionükelt nicht
 
hmm, klingt irgendwie logisch, aber wenn ich jetzt statt .Text ne echte konstante zu weise dann kommt das man keine Konstanten zuweisen kann, aber das kommt ja jetzt nit ... :?:

egal, jetzt gehts, danke dir vielmals

jbg 24. Jun 2006 11:24

Re: var in functions deklaration funktionükelt nicht
 
Zitat:

Zitat von Green
statt .Text ne echte konstante zu weise dann kommt das man keine Konstanten zuweisen kann, aber das kommt ja jetzt nit ... :?:

Das liegt dann wohl daran, dass die Text-Eigenschaft als TCaption deklariert ist und nicht als String. Auch wenn type TCaption = string ist, sind das für den Compiler erstmal zwei unterschiedliche Typen bei der Parameterübergabe von var und out Parametern.

Green 24. Jun 2006 11:30

Re: var in functions deklaration funktionükelt nicht
 
achso, also wenn Caption vom Typ String wäre würde es gehen? oder is da einfach nur die prioritär höher so dass er wenn er sieht TCaption <> String abbricht bevor er 'bemerkt' das TCaption ja gar nicht variabel ist?

Dax 24. Jun 2006 11:34

Re: var in functions deklaration funktionükelt nicht
 
Zitat:

Zitat von jbg
Auch wenn type TCaption = string ist, sind das für den Compiler erstmal zwei unterschiedliche Typen

Naaiiin :( TCaption ist lediglich ein Alias für string. Was du meinst ist
Delphi-Quellcode:
type
  TCaption = type{!} string;
Es liegt dran, das er versucht ne Property zu übergeben, was in einem get-Aufruf enden würde, der eine Konstante liefert, die damit keine Variable ist und damit auch nicht änderbar...

himitsu 24. Jun 2006 11:42

Re: var in functions deklaration funktionükelt nicht
 
Du willst doch anscheinend nur was in CountStrg zählen?
Dann brauchst du doch eigentlich kein VAR.

schonmal eines davon versucht?
Delphi-Quellcode:
function CountStrg(Start: integer; Const Text: string): integer;
function CountStrg(Start: integer; In Text: string): integer;

function CountStrg(Start: integer; Const Text: TCaption): integer;
function CountStrg(Start: integer; In Text: TCaption): integer;

Ansonsten gäbe es dann auch noch sowas:
Delphi-Quellcode:
function CountStrg(Start: integer; Object: TObject): integer;
  ... TEdit(Object).Text

CountStrg(2, Sender);
Delphi-Quellcode:
function CountStrg(Start: integer; Edit: TEdit): integer;
  ... Edit.Text

CountStrg(2, Sender);

jbg 24. Jun 2006 15:31

Re: var in functions deklaration funktionükelt nicht
 
Zitat:

Zitat von Dax
Es liegt dran, das er versucht ne Property zu übergeben, was in einem get-Aufruf enden würde, der eine Konstante liefert, die damit keine Variable ist und damit auch nicht änderbar...

Mein Posting ging auf diesen Satz ein:
Zitat:

aber wenn ich jetzt statt .Text ne echte konstante zu weise dann kommt das man keine Konstanten zuweisen kann
Der Compiler gibt ihm also
Code:
[Fehler] Unit1.pas(55): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
aus, wo er sonst ein
Code:
[Fehler] Unit1.pas(54): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
bekommen würde. Und das liegt daran, dass der Compiler in diesem Fall TCaption nicht identisch mit string setzt.


@himitsu:
Habe ich was verpasst, oder seit wann unterstützt Delphi denn das in bei Parametern?

Green 24. Jun 2006 16:59

Re: var in functions deklaration funktionükelt nicht
 
Zitat:

Zitat von himitsu
Du willst doch anscheinend nur was in CountStrg zählen?
Dann brauchst du doch eigentlich kein VAR.

schonmal eines davon versucht?
Delphi-Quellcode:
function CountStrg(Start: integer; Const Text: string): integer;
function CountStrg(Start: integer; In Text: string): integer;

function CountStrg(Start: integer; Const Text: TCaption): integer;
function CountStrg(Start: integer; In Text: TCaption): integer;

Ansonsten gäbe es dann auch noch sowas:
Delphi-Quellcode:
function CountStrg(Start: integer; Object: TObject): integer;
  ... TEdit(Object).Text

CountStrg(2, Sender);
Delphi-Quellcode:
function CountStrg(Start: integer; Edit: TEdit): integer;
  ... Edit.Text

CountStrg(2, Sender);

ich will 1. etwas counten, und zweitens einen 2. wert übergeben --> also brauch ich var als schlüsselwort ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 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