Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inkompatible Typen - String ungleich String ?? (https://www.delphipraxis.net/46210-inkompatible-typen-string-ungleich-string.html)

Mr. No 20. Mai 2005 15:27


Inkompatible Typen - String ungleich String ??
 
Hallo,
ich habe in zwei unterschiedlichen Klassen Stringzeigertypen derart definiert:
Delphi-Quellcode:
type
  PString = ^String;
in beiden Klassen gibt es eine Prozedur, die als Parameter diesen Typ PString erwartet:

Delphi-Quellcode:
procedure run(Source: PString; index: Integer);
wenn ich jetzt von einer Klasseinstanz eine Methode der anderen aufrufen will

aus Klasse1:
Delphi-Quellcode:
meineKlasse2.run(Source, 0);
dann spuckt der Interpreter folgende Fehlermeldung aus:
Inkompatible Typen: 'KlasseA.String' und KlasseB.String

Kann mir jemand erklären, woran das liegt?

Danke!

[edit=alcaeus]Überbleibsel von Codeblöcken entfernt. Mfg, alcaeus[/edit]

MrSpock 20. Mai 2005 15:29

Re: Inkompatible Typen - String ungleich String ??
 
Hallo Mr.No,

du darfst PString nur in einem Modul deklarieren und musst diese Deklaration mit uses (auf das Modul, dass die Deklaration enthält)in das andere Modul einbinden.

Mr. No 20. Mai 2005 15:38

Re: Inkompatible Typen - String ungleich String ??
 
hey - klasse - danke, es funktionert! :)

Eine Frage hab ich aber noch. Wenn ich jetzt beispielsweise zwei Klassen hätte, die das jeweils brauchen (PString = ^String), und von einer dritten beiden über uses eingebunden werden. Gibt's dann irgendwelche Probleme, weil dann zweimal die gleiche Typendeklaration auftaucht? - Was mach ich dann?

Gruß Max

shmia 20. Mai 2005 15:40

Re: Inkompatible Typen - String ungleich String ??
 
Zitat:

Zitat von Mr. No
ich habe in zwei unterschiedlichen Klassen Stringzeigertypen derart definiert:
ausblenden anzeigen Sourcecode
Delphi-Quellcode:
type
  PString = ^String;

Der Datentyp AnsiString (ab Delphi 2 ist das gleich String) ist von sich aus schon ein Zeiger.
sizeof(string) ergibt 4 !!
Ausserdem wird beim AnsiString intern Referenzzählung sowie automatische Speicherbelegung & freigabe angewendet.
Also ist ein Stringzeigertyp kontraproduktiv.
Übrigens ist PString schon in System.pas deklariert und sollte deshalb nicht erneut deklariert werden.

Mr. No 20. Mai 2005 15:45

Re: Inkompatible Typen - String ungleich String ??
 
ah - ok - das ist natürlich noch praktischer. Das bedeutet also, dass ich bei einem Funktionsaufruf mit einem Stringargument immer eine Referenz und keine Kopier übergebe?

shmia 20. Mai 2005 15:50

Re: Inkompatible Typen - String ungleich String ??
 
Zitat:

Zitat von Mr. No
ah - ok - das ist natürlich noch praktischer. Das bedeutet also, dass ich bei einem Funktionsaufruf mit einem Stringargument immer eine Referenz und keine Kopier übergebe?

Genau !
Wenn du den String-Parameter innerhalb der Funktion nicht ändern möchtest, dann als const Parameter übergeben:
Delphi-Quellcode:
procedure Test(const inhalt: string);
Wenn du den String ändern und an den Aufrufer zurückgeben willst, dann als var Parameter übergeben:
Delphi-Quellcode:
procedure MitSternchen(var s : string);
begin
   s := '*** '+s+' ' ***';
end;

Mr. No 20. Mai 2005 16:09

Re: Inkompatible Typen - String ungleich String ??
 
Hi,
das
Delphi-Quellcode:
procedure MitSternchen(var s : string);
hab ich gerade versucht.

An einer Stelle bekomme ich hier aber eine Fehlermeldung.
Und zwar wenn ich schreibe:
Delphi-Quellcode:
procedure KlasseA.run(var Line: String);
begin
  meineKlasseB.run(Line[i]);
  ...
wobei auch die Prozedur run der KlasseB
mit
Delphi-Quellcode:
run(var Line: String);
definiert ist

SirThornberry 20. Mai 2005 16:14

Re: Inkompatible Typen - String ungleich String ??
 
weil "line[i]" ein Property und keine Variable ist. Hinter "line[i]" vergirgt sich eine GetMethode und eine SetMethode und einer GetMethode (funktion) kann man logischer weise keinen Wert zu weisen, also ist es auch keine Variable... Ich denk du weißt was ich meine...

Mr. No 20. Mai 2005 16:26

Re: Inkompatible Typen - String ungleich String ??
 
ja - verstehe - und wie kann ich das Problem dann beheben?
Wie kann ich von der Referenz Line auf die Property zugreifen, um die i-te Zeile zu übergeben?

SirThornberry 20. Mai 2005 16:48

Re: Inkompatible Typen - String ungleich String ??
 
da hilft nur eine zwischenvariable wenn du mit referenz (var) arbeiten willst.


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