AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi var in functions deklaration funktionükelt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

var in functions deklaration funktionükelt nicht

Ein Thema von Green · begonnen am 24. Jun 2006 · letzter Beitrag vom 24. Jun 2006
Antwort Antwort
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#1

var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 10:51
also ich habe eine function folgendermassen deklariert:
function CountStrg(Start: integer; var Text: string): integer; wenn ich die jetzt so aufrufe:
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...
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 10:55
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
  Mit Zitat antworten Zitat
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#3

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 11:01
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 11:24
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.
  Mit Zitat antworten Zitat
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#5

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 11:30
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?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 11:34
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 11:42
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 15:31
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?
  Mit Zitat antworten Zitat
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#9

Re: var in functions deklaration funktionükelt nicht

  Alt 24. Jun 2006, 16:59
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
  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 20:50 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