Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Is doch echter Schmuh.... TYPE (Forward Referencing)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.03.2009, 12:57    Titel: Is doch echter Schmuh.... TYPE (Forward Referencing) Antworten mit Zitat

Laut FB-Referenz funktioniert folgender Quelltext:
Code:

TYPE FwdUDT2 AS UDT2

TYPE UDT1
   a AS INTEGER
   b AS FwdUDT2 PTR
END TYPE

TYPE UDT2
   c AS INTEGER
   d AS INTEGER
END TYPE


folgender aber schon NICHT mehr:

Code:

TYPE FwdUDT2 AS UDT2

TYPE UDT1
   a AS INTEGER
   b AS FwdUDT2 PTR
   declare sub testen
END TYPE

sub udt1.testen
    print b->c
    print b->d
end sub

TYPE UDT2
   c AS INTEGER
   d AS INTEGER
END TYPE


Nach meinen Tests muss man es umständlich und verwirrend umschreiben (wobei man die Reihenfolge der TYPEs und SUBs einhalten muss!):

Code:

TYPE FwdUDT2 AS UDT2

TYPE UDT1
   a AS INTEGER
   b AS FwdUDT2 PTR
   declare sub testen
END TYPE

TYPE UDT2
   c AS INTEGER
   d AS INTEGER
END TYPE

sub udt1.testen
    print b->c
    print b->d
end sub


oder kennt jemand noch einen anderen Weg?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 30.03.2009, 13:44    Titel: Antworten mit Zitat

Die SUBs alle erst komplett nach sämtlichen TYPE-Deklarationen zu schreiben, ist doch jetzt nicht sooo blöd? Das mit dem Forwarding kommt halt daher, weil immer schon alles, was verwendet werden soll, bereits deklariert werden muss. Meiner Meinung nach könnte der Compiler durchaus zwei Durchläufe machen, einmal um die Deklarationen zusammen zu sammeln und dann einen zum Compilieren. Er macht es leider nicht, ist halt eben so.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.03.2009, 14:49    Titel: Antworten mit Zitat

Ah ok... hm.. sollte man vielleicht mal in der Referenz erwähnen... ich war echt davon ausgegangen, dass solange alles referenziert ist, auch alle elemente so ohne weiteres ansprechbar sind...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 30.03.2009, 15:56    Titel: Antworten mit Zitat

An sich ist das genauso wie bei den SUBs. Wenn sie definiert wird, bevor man sie das erste Mal aufruft, dann kann man sich das Deklarieren sparen. Ich habe es zwar nicht ausprobiert, aber ich bin ziemlich sicher, dass man bei zwei sich gegenseitig aufrufenden SUBs um eine Deklaration nicht herumkommt. Ähnlich bei den UDTs: Solange sie nicht deklariert sind, kann man sie nicht verwenden, auch nicht in anderen UDTs (mit Ausnahme des Forward Referencing).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 31.03.2009, 08:58    Titel: Antworten mit Zitat

Ja ok, aber grade die Properties,Funktionen und Subs von Types halte ich immer gerne möglichst nahe an der TYPE-Definition.. also rein von der Position im Quelltext.
Ich finde, das zieht alles aus dem zusammenhang raus.. wenn ich einen Quelltext lese, dann erwarte ich naturgemäß alles ungefähr dort wo es zum ersten mal erwähnt wird.

Wenn ich also nach einer Property einer Type suche, dann erwarte ich sie meistens in der unmittelbaren nähe der Type.. Nach dem Motto: Ich such nen Apfel find ihn aber nicht beim Obst sondern bei Kraut-und-Rüben ...

Naja.. nützt ja alles nix sich drüber zu beschweren, ändern kann da so schnell keiner was dran.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 31.03.2009, 14:55    Titel: ! Antworten mit Zitat

Forward-Deklarieren heisst nicht, dass der Compiler ein Hellseher wird. Es ist dazu da, dass ggf. UDT1 und UDT2 sich gegenseitig referenzieren können. Aber nicht, dass der Compiler nach der Deklaration von UDT1 schon automatisch weiss, wie die von UDT2 aussehen wird...

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz