![]() |
Inkompatible Typen - String ungleich String ??
Hallo,
ich habe in zwei unterschiedlichen Klassen Stringzeigertypen derart definiert:
Delphi-Quellcode:
in beiden Klassen gibt es eine Prozedur, die als Parameter diesen Typ PString erwartet:
type
PString = ^String;
Delphi-Quellcode:
wenn ich jetzt von einer Klasseinstanz eine Methode der anderen aufrufen will
procedure run(Source: PString; index: Integer);
aus Klasse1:
Delphi-Quellcode:
dann spuckt der Interpreter folgende Fehlermeldung aus:
meineKlasse2.run(Source, 0);
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] |
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. |
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 |
Re: Inkompatible Typen - String ungleich String ??
Zitat:
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. |
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?
|
Re: Inkompatible Typen - String ungleich String ??
Zitat:
Wenn du den String-Parameter innerhalb der Funktion nicht ändern möchtest, dann als const Parameter übergeben:
Delphi-Quellcode:
Wenn du den String ändern und an den Aufrufer zurückgeben willst, dann als var Parameter übergeben:
procedure Test(const inhalt: string);
Delphi-Quellcode:
procedure MitSternchen(var s : string);
begin s := '*** '+s+' ' ***'; end; |
Re: Inkompatible Typen - String ungleich String ??
Hi,
das
Delphi-Quellcode:
hab ich gerade versucht.
procedure MitSternchen(var s : string);
An einer Stelle bekomme ich hier aber eine Fehlermeldung. Und zwar wenn ich schreibe:
Delphi-Quellcode:
wobei auch die Prozedur run der KlasseB
procedure KlasseA.run(var Line: String);
begin meineKlasseB.run(Line[i]); ... mit
Delphi-Quellcode:
definiert ist
run(var Line: String);
|
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...
|
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? |
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 10:25 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 by Thomas Breitkreuz