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:

Constructor frage:

 
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: 31.05.2008, 15:05    Titel: Constructor frage: Antworten mit Zitat

Wie komme ich an den Zeiger eines UDTs innerhalb dessen Constructors?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 31.05.2008, 16:11    Titel: Antworten mit Zitat

Wat? ... wie meinst du das? .. du willst den zeiger auf ein noch nicht existierendes UDT haben!?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 31.05.2008, 17:48    Titel: Antworten mit Zitat

In dem moment wo man mit Dim eine UDT initiiert wird ja der constructor der UDT ausgeführt falls man einen definiert...

Nun möchte ich einen Constructor zu einem UDT so programmieren, dass bei initiierung der Zeiger zur UDT in ein (shared) array eingetragen wird... im prinzip so ein bischen wie ein loggbuch..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 31.05.2008, 22:49    Titel: Antworten mit Zitat

hmmm ... cih glaub das geht nicht ... wenn ich mich nicht irre, dann wird der constructor doch ausgeführt, bevor die eigentliche inizialisierung beginnt. Sprich, es is noch nicht vorhanden, und wird erst erstellt, nachdem der constructor fertig is.

bin ich mir ziemlich sicher, ... aber, kann mich auch irren.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 31.05.2008, 23:00    Titel: Antworten mit Zitat

Auf die Eigenschaften des UDTs kann ich doch vom constructor aus zugreifen! Dann schätze ich doch mal das der speicher für das UDT bzw für dessen Eigenschaften bereits reserviert und initiiert wurde oder?

und wenn der speicher bereits reserviert und initiiert wurde, dann wirds sicherlich auch schon einen zeiger dahin geben.. schätze ich einfach mal...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 31.05.2008, 23:16    Titel: Antworten mit Zitat

http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgConstructor

Code:
TYPE otherfoo
    as integer x,y
END TYPE   
TYPE foo   
    as otherfoo z
    Declare Constructor()   
END TYPE

Constructor foo()
  Print @This ' Pointer zu sich selbst
  Print @z ' Pointer zu z
End Constructor
dim as foo bar
sleep

_________________
+++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 02.06.2008, 11:49    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
Auf die Eigenschaften des UDTs kann ich doch vom constructor aus zugreifen! Dann schätze ich doch mal das der speicher für das UDT bzw für dessen Eigenschaften bereits reserviert und initiiert wurde oder?

und wenn der speicher bereits reserviert und initiiert wurde, dann wirds sicherlich auch schon einen zeiger dahin geben.. schätze ich einfach mal...

Verschätzt.
Ein Zeiger ist nur eine Integer-Variable, die eine Speicheradresse aufnimmt. Den Zeiger mußt Du wie jede andere Variable selbst deklarieren und zuweisen. Das Deklarieren mußt Du ausßerhalb des Construktors machen und kannst ihn dann dem Construktor übergeben oder einfach die Adresse des UDT abfragen. Innerhalb des Constructors wird der Zeiger mit Abschluß der Constructor-Funktion ungültig.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 02.06.2008, 14:50    Titel: Antworten mit Zitat

@Elektronix:
"Ein Zeiger ist nur eine Integer-Variable, die eine Speicheradresse aufnimmt."

Rüschtüsch...

"Den Zeiger mußt Du wie jede andere Variable selbst deklarieren und zuweisen."

Auch rüschtüsch...

"Das Deklarieren mußt Du ausßerhalb des Construktors machen und kannst ihn dann dem Construktor übergeben oder einfach die Adresse des UDT abfragen."

Wie soll ich dem Construktor einen Zeiger zu etwas übergeben was noch nicht existiert?

Wird der Constructor ausgeführt, sind definitiv bereits alle Eigenschaften des UDTs per Default-Constructor initiiert!!
Der UDT-Constructor soll dann nur noch die aufgabe übernehmen die Werte der Eigenschaften auf die anforderungen des Programmierers anzupassen...

"Innerhalb des Constructors wird der Zeiger mit Abschluß der Constructor-Funktion ungültig"

Das entspricht nicht meinen Beobachtungen.
Der Pointer "@This" innerhalb eines Constructors zeigt definitiv auf die Position des UDTs.

Also entweder hast du eine falsche informationsquelle oder wir haben aneinander vorbeigeredet und haben es nur nicht gemerkt.

Trotzdem vielen dank für deinen Beitrag.




@Stormy: Danke für deine Recherche!! Auf @This wär ich nie gekommen grinsen *dirbeigelegenheitnenkaffeeausgeb*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 02.06.2008, 15:19    Titel: Antworten mit Zitat

Nein, Du kannst einem Construktor auch externe Werte übergeben, um diese bestimmten Variablen des UDT zuzuweisen. Natürlich müssen die Werte vorher geDIMt sein. Beispiel aus meiner verketteten Liste:

Code:
Dim ListHead As HeadNode = HeadNode (pListHead, pListEnd, pListItem, "sorted")

Damit wird der Construktor von HeadNode aufgerufen, der die Pointer und die Listenart ("sorted") übernimmt. Die Übergabekonventionen sind die gleichen wie bei normalen Funktionen.

Zitat:
Der Pointer "@This" innerhalb eines Constructors zeigt definitiv auf die Position des UDTs.
Richtig, der ist aber nur innerhalb des Construktors gültig. Außerhalb nur in Record-Funktionen des UDT.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 02.06.2008, 15:23    Titel: Antworten mit Zitat

Ja ok... verstehe wie du das meinst, aber ich glaub wir haben aneinander vorbeigeredet.

Klar kann man pointer einem constructor für ein udt übergeben..

Meine frage war aber, wie ich innerhalb eines UDT-Constructors an den EIGENEN Zeiger komme. Und nicht an den Zeiger eines anderen UDTs oder eine anderen Variable...

Aber wie gesagt, das hat sich mit "@This" erledigt lächeln
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