Stärken und Schwächen von Object Pascal

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das habe ich ausprobiert !
Defniere ich Oben im Interfcae Teil eine Forwad Defination geht das nicht bzw. es geht nur wenn die klasse in der gleiche unit ist. aber nicht wenn die klasse in unit2 drin ist.

ich kann ja gleich mal ein kleine Testanwendung schreiben.... dann siehst du was ich meine !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

hier der beweis:
unit2

Code: Alles auswählen

unit Unit2; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
  tclasse2 = class;
  { Class1 }
  TClass1 = class
  public
    classs2:tclasse2;
    procedure Msg(str:String);
  end;
 
implementation
uses unit3;
 
{ Class1 }
 
procedure tClass1.Msg(str: String);
begin
  Writeln(str);
end;
 
end.
unit3

Code: Alles auswählen

unit Unit3; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils; 
 
type
 
  { classe2 }
 
  tclasse2 = class
  public
    procedure msg(str:String);
  end;
 
implementation
 
{ classe2 }
 
procedure classe2.msg(str: String);
begin
  writeln(str;
end;
 
end.
in der unit2 kommt folgende Fehler Meldung:
unit2.pas(11,14) Error: Forward type not resolved "tclasse2"

Wenn sich jetzt die klassen gegenseitig brauche und wenn ich jetzt unit3 einfach oben beim uses hinschreibe und in unit3 auf unit2 zugreifen möchte, kommt es zu Fehlern.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Du hast in deiner ursprünglichen beschreibung aber nichts von einer forward deklaration gesagt ?!

wozu soll die hier gut sein ? die macht keinen Sinn !
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich weiß für dich ergibt nie was sinn. Aber darum geht es auch nicht !
Es geht nicht - Fertig !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Naja...also wenn ich irgendetwas zusammenbastel nur um hinterher sagen zu können, es geht nicht, ists ja nicht gerade aussagefähig.
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Schon bei Delphi wurde gepredigt, wennst du zirkulare Refernzen hast, so erzeuge eine unit, die die Referenzen auflöst bzw. in den implementationsteil verschiebt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also pluto du hast nicht genug informationen geliefert hinterher nachreichen und meine beiträge kritisieren die ich zu deinem urproblem geschrieben habe was soll das nun wieder. Wenn du was willst dann liefere auch genug Information dazu und mecker nicht hinterher das ich dir was nicht beantwortet habe was gar nich gefragt war
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ok ! lassen wir es...... du sagst es macht kein sinn und ich meine das es manche mal praktisch und dabei kann es ruhig bleiben... machen wir besser beim Frage Thema weiter ok ?
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:Ach nochwas der Zirkuläre Unit aufruf ist keine Schwäche von Objekt Pascal das geht nirgends. Macht auch keinen Sinn.
Wenn das mit "zirkuläre Unit" gemeint ist: m.E. macht es schon Sinn in einer Unit eine Klasse TX zu definieren und in einer anderen die Klasse TY, so dass TX eine Variable vom Typ TY und TY eine Variable vom Typ TX enthält. Innerhalb einer Unit geht das mit einer foreward Klassen-Definition, Unit-übergreifend anscheinen nicht.

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Viel Lärm um nichts Neues! ;-)
Dass das nicht geht ist bekannt.
Ich muss zugeben, dass mir das auch schon die Suppe versalzen hat.
Insofern gebe ich Pluto recht, dass das Phänomen nicht gerade zu den angenehmen Seiten von Delphi zählt.
Andererseits lässt sich das mit einem "sauberen Design" immer lösen.
Auch so'n Ding ist das mit den "Friend" - Klassen.
Wenn man mehrere voneinander Abgeleitete Klassen in einer Unit hat, so können die ja immer auch auf private Felder der Parent Klasse zugreifen.

z.B. :

Code: Alles auswählen

TA=Class
   private
   fTest:Boolean;
  end;
 
  TB=Class(TA)
  end;   
 
...
var Tst:TB;
begin
Tst:=TB.create;
 Tst.fTest:=false; //Geht nur im der gleichen Unit
Tst.free;
end;
Wenn man dann den Code in mehrere Units aufteilen will ist Schluss damit.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Code: Alles auswählen

type
 
  TClass2 = class;
 
  TClass1 = class(TObject)
  private
     FClass2: TClass2;
  end;
 
{$I class2.inc}
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich wusste gar nicht das eine andre Klasse auf ein Privates Feld zugreifen kann, wenn die klasse abgeleitet ist wie in dein beispiel Theo.

Ich dachte dafür ist die Protectet Feld zuständig !

Ich denke hier könnte "die" noch etwas dran rum Pfeilen oder nicht ?

@Christian
Nur weil ich diese Funktion mir Wünsche kann ich sie nicht gleich einbauen, aber für den der ein Complier schreiben kann, ist das mit Sicherheit ein leichtes sowas einzubauen also für mich !

Sonst hätte ich es schon längst getan und eine neuen Ableger von Object Pascal geschaffen, wo es diesen und andere "Bug" nicht mehr gibt.

Darum fält es mir auch schwer in anderen Soruce Code mich zu recht zu finden insbesondere in sehr umganreichen dich sehr verwurschtelt sind.

Wie z.b. der von der VST... dort würde ich ja einige BUGS entfernen, aber das würde länger dauern als die Komplete VST neu zu schreiben.

Wobei ich kann ja schon Erfolreich für einige Zeit den Lazarus Code Editor verändern das mit den Sprungmarken habe ich geändert gehabt
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Pluto es ist aber kein Bug, es ist soweit mir bekannt nicht möglich. Also doch auch für jemanden der Compiler baut recht schwierig. Da du erst recht nicht einschätzen kannst wie schwierig es überhaupt ist kannst du auch nicht solche Sprüche klopfen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ich weiß nicht wo das Problem liegt. Wenn jemand ein Kompiler schreiben kann, kann er sowas auch "einbauen".

Ich kann mir vorstellen wie viel Aufwand ist es einen Kompiler zu bauen !
Ich weiß ja das du mir nicht all zu viel zumutetes das ist mir inzwischen auch

voll kommen egal Denke was du möchtes. Aber komme bitte nicht mit sowas das kann ich nicht einschätzen und so !

Ich Programmiere jetzt lange genug um genau sowas einschätzen zu können. Ich mag zwar selten Projekte Fertig erstellt habe bzw. soweit das ich sie veröffentliche konnte, aber drum ist es mir auch nie wirklich gegangen.

Ich möchte gar nicht behaupten das ich alles kann, ich weiß genau was ich kann und was ich nicht kann !

Punkt ! Aus ! Fertig ! Denn Rest sollten wir entweder per PM oder in einem neuen Thread besprechen wenn du der Meinung bis !

Ich bin auch nicht hier Angemledet um zu zeigen das ich der Beste bin. Ich bin hier weil ich einfach meine Fragen stellen möchte und zu Beiträge Antworten möchte - mögliches Sinnvolles und Hilfreiches - ich bin jetzt nicht
hier um irgendjemand zu irgendwas zu beweisen. Genau das denke ich über dich , wenn ich mir deine Beiträge anschaue und deine Antworten:
die mögliches Kurtzt sind und ohne mühe geschrieben worden sind, Da habe ich oft den eindruck das du keine lust hast richtig zu antworten nicht nur bei mir auch bei anderen. Wo du dann nur Wort geschrieben hast Ja z.b. aber kein Grund oder genaue Informationen geschrieben hast warum nun Ja oder nein.

Also bitte komme nicht damit an. Langsam reicht es mir, immer wieder solche Beiträge wie diesen schreiben zu müssen.

Keine zwingt dich zu Antworten Also tue es auch nicht wenn du keine Lust hast und wenn du wirklich Lust hast, dann überlege dir bitte deine Antwort genau besonders ob sie Hilfreich ist oder nicht.

bei diesem Beitrag weiß ich von vorne rein das er sinnlos ist aber ich schreibe ihn trotzdem in der Hoffung das du daraus "etwas" Lerntest"

Ich hoffe wir verstehen uns jetzt !

Wenn du das nicht einsehen kannst bitte ! ist mir egal.

zum Problem: Warum ist dass dann in C++ bzw c möglich ?
(das habe ich eine ganze Zeitlang unter dos gemacht)

Ich wollte hier eigentlich nur eine Allgemeine Unterhaltung über die Schwächen und Stärken machen, aber nicht über sowas.

Alle Anderen habe dies beriefen nur du nicht ! warum bloss nicht ?

So jetzt warte ich mal dein Reaktion ab und ob dieser Beitrag nun endlich was genützt hat oder nicht !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Punkt ! Aus ! Fertig ! Denn Rest sollten wir entweder per PM oder in einem neuen Thread besprechen wenn du der Meinung bis !
richtig.

@Pluto, keiner zwingt dich, die Antworten zu lesen, wenn sie dir nicht passen, kannst sie ja auch zur Abwechslung mal ignorieren, Christian schreibt ja letztlich auch nur seine Meinung.

Und du musst Christian nicht missionieren.
Johannes

Antworten