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:

Pointer forward references

 
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 12.06.2012, 01:03    Titel: Pointer forward references Antworten mit Zitat

Ich habe mal wieder ein kleines Problem grinsen

Und zwar wollte ich mein Projekt in mehrere Module aufgliedern um das ganze etwas übersichtlicher zu gestalten...
Nun sind aber fast alle UDTs bzw Pointer in abhängigkeit mit-/voneinander

Ich kann in Modul A nicht auf ein Zeiger zugreifen der erst in Modul B erstellt wird...

Einfache Pointer mit _irgendeinpointer as myudt ptr geht ja, aber wenn ich nun auf teile des UDT zugreifen will zB thispointer -> var meckert der Compiler logischerweise da 'var' ja noch gar nicht existiert, kann ich das evtl auch schon festlegen das var zu einem späteren zeitpunkt erstellt wird?!?!

Edit:
Netter Artikel:
Definitionen und Deklarationen in C++

Hatte mir zwar eine andere Lösung vorgestellt aber so kann ich wohl auch arbeiten...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 12.06.2012, 10:51    Titel: Antworten mit Zitat

Du kannst nur den Type selbst forwarden, nicht seine Mitglieder. Deswegen Teilt man ja auch z.B. in C++ den Code in Header und eigentlichen Code auf; Im Header solltest du wirklich nur den Typ selbst brauchen und im Code bindest du einfach die Header für beide Typen ein. Geht in FB genauso.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 12.06.2012, 19:49    Titel: Antworten mit Zitat

Schau mal in diesem Beispiel nach
http://www.askos.de/tutorial/oma_buchterm.bas

Und suche nach der Zeile

"type tbookf as tbook"

Da findest du eine Forward-Deklaration mit Zeigern und UDTs. Kein Hexenwerk lächeln

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.06.2012, 13:31    Titel: Antworten mit Zitat

Er will ja nicht einen Zeiger auf den Typ, sondern auf ein konkretes Datum in dem Typ zugreifen. Das ist aber grundsätzlich erst bekannt, sobald der Typ deklariert wurde.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 17.06.2012, 17:51    Titel: Antworten mit Zitat

Ich hab das Problem ehrlich gesagt noch nicht kapiert. verlegen

Code:

type ftchild as tchild

type tparent
  dim as integer x,y
  dim as ftchild ptr ch1,ch2
  name as string
end type

type tchild
  dim as tparent ptr p
  name as string
end type

sub main
  dim as tparent p
  p.name="Eltern"
  p.ch1=new ftchild
  p.ch1->name="Kind"
  p.ch1->p=@p
  'Wo ist jetzt das Problem?
  print p.name
  print p.ch1->name
  print p.ch1->p->name
end sub

main


Hier kann jeder auf alles zugreifen: Parent auf jedes Element von child und child auf jedes Element von parent. Das ist das Forward-Pattern schlechthin. So - und jetzt bin ich gespannt, was eternal_pain eigentlich machen will...zwinkern

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.06.2012, 21:45    Titel: Antworten mit Zitat

Ich lese da folgendes heraus:

Datei ModulA.bi
Code:

type forward as foo1

type foo2
  dim bar2 as foo1 ptr
  sub fun()
    bar2->bar1 = 0 ' Gibt's noch nicht!
  end sub
end type


Datei ModulB.bi (wird später eingebunden)
Code:

type foo1
  bar1 as integer
end type


Die saubere Lösung ist hier natürlich, die Implementierung von fun() in eine Implementierungsdatei auszulagern, also ModulA.bas.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 18.06.2012, 06:07    Titel: Antworten mit Zitat

Ja, aber so gehts halt dann auch nicht. Wenn man mit forwards arbeiten will, muss die Reihenfolge Deklaration - Definition - Initialisierung strikt eingehalten werden, vor allem bei den Headern.

VG!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.06.2012, 13:56    Titel: Antworten mit Zitat

Gut dass wir uns einig sind, so weit waren wir auch schon nach meiner ersten Antwort. cool
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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