Mathias hat geschrieben: Fr 6. Mär 2026, 17:10
Aber ein Zeiger auf ein record wird explizit deklariert. Eine Variable vom Typ TObject oder einer Kindklasse ist jedoch immer ein Zeiger, dadurch kann der Compiler ohne große Probleme Vorwärtsdeklarationen dafür zulassen. Für record-Typen eben nur für 'ne Zeigervariable.
Dan wird es mit den klassischen object das gleiche Problem wie mit record sein, das man dies auch statisch oder dynamisch verwenden kann ?
Und die class geht nur dynamisch ?
Korrekt.
Mathias hat geschrieben: Fr 6. Mär 2026, 17:10
Da scheint der C Compiler weniger heikel zu sein, da kann man struct forward deklarieren.
C-Compiler lassen es jedoch nicht zu ein vorwärtsdeklarierties
struct (oder
class im Fall von C++) in einem Kontext zu nutzen, in dem weiter Details wie die Größe bekannt sein müssen. Das hier scheitert zum Beispiel:
Code: Alles auswählen
struct test;
struct blubb
{
struct test t;
};
struct test
{
int c;
};
int main()
{
}
Der Code kompiliert jedoch wenn
t als
struct test* deklariert ist. Das ist letztlich das gleiche Verhalten wie in FPC.
fliegermichl hat geschrieben: Sa 7. Mär 2026, 07:58
Das geht zwar schnell, hat aber auch einige Nachteile, wie man das hier z.B. sehen kann.
So würde ich mir auch wünschen, daß man Klassen als "external" definieren könnte und somit jede Klasse in einer eigenen Unit unterbringen könnte und dennoch darauf referenzieren.
Für das JVM Target unterstützt FPC das für Java Klassen. Ich habe in dem Zuge auch mal versucht das allgemein zu implementieren, bin dann jedoch auf Probleme gestoßen, die ich zumindest damals (vor mehr als 10 Jahren) nicht lösen konnte.