AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Inkompatible Typen - String ungleich String ??
Thema durchsuchen
Ansicht
Themen-Optionen

Inkompatible Typen - String ungleich String ??

Ein Thema von Mr. No · begonnen am 20. Mai 2005 · letzter Beitrag vom 20. Mai 2005
Antwort Antwort
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#1

Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:27
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:

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

aus Klasse1:
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]
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:29
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#3

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:38
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:40
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.
Andreas
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#5

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:45
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 16:50
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:
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;
Andreas
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#7

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 17:09
Hi,
das
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
run(var Line: String); definiert ist
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 17:14
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...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Mr. No

Registriert seit: 16. Feb 2005
36 Beiträge
 
#9

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 17:26
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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Inkompatible Typen - String ungleich String ??

  Alt 20. Mai 2005, 17:48
da hilft nur eine zwischenvariable wenn du mit referenz (var) arbeiten willst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 10:21 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