Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 12.06.2012, 01:03 Titel: Pointer forward references |
|
|
Ich habe mal wieder ein kleines Problem
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.06.2012, 10:51 Titel: |
|
|
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 |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 12.06.2012, 19:49 Titel: |
|
|
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
VG!
Croco |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.06.2012, 13:31 Titel: |
|
|
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 |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 17.06.2012, 17:51 Titel: |
|
|
Ich hab das Problem ehrlich gesagt noch nicht kapiert.
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...
VG!
Croco |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.06.2012, 21:45 Titel: |
|
|
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 |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 18.06.2012, 06:07 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.06.2012, 13:56 Titel: |
|
|
Gut dass wir uns einig sind, so weit waren wir auch schon nach meiner ersten Antwort.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|