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: Aufrufzeitpunkt

 
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
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 26.11.2005, 13:24    Titel: CONSTRUCTOR: Aufrufzeitpunkt Antworten mit Zitat

Hallo Leute!

Ich wollte nachfragen, ob jemand den GENAUEN Punkt kennt, an dem eine Prozedur mit der CONSTRUCTOR-Klausel aufgerufen wird.
(Referenz: http://fb.exp-soft.de/r.php?s=CONSTRUCTOR ; ich hoffe, Mecki hat diesen Eintrag schon hochgeladen)

Mein Problem ist nämlich das Folgende:

Ich schreibe an einem Programm mit 2 BAS-Dateien. Eine ist dabei das Hauptmodul, die andere wird via #INCLUDE eingebunden.
In der CONSTRUCTOR-Sub wird eine FUNCTION aus der eingebundenen BAS aufgerufen; diese FUNCTION greift auf ein SHARED-Array zu, das eigentlich im Header der eingebundenen BAS dimensioniert wurde. Dennoch führt UBOUND an diesem Array zu einem Programmabsturz, freeBASIC behandelt es also, als wäre es noch nicht dimensioniert.
Wenn ich die CONSTRUCTOR-Klausel entferne, und die FUNCTION ganz normal im Hauptmodul aufrufe, funktioniert aber alles ganz so wie es soll.

Man könnte meine Frage also auch so formulieren:
Welche Anweisungen werden ausgeführt, bevor die CONSTRUCTOR-SUB ausgeführt wird?

In jedem Fall sind das DECLARE und TYPE.
DIM SHARED zählt - wie ich es sehe - nicht dazu.


Danke für eure Antworten.
Have a nice day
Ciao
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 26.11.2005, 13:36    Titel: Antworten mit Zitat

nein hat er noch nicht..


Aber zu deinem Problem: include wird vom Compiler bearbeitet, ist also zum programmaufruf schon garnicht mehr existent. Die Construktor-Methode wird wahrscheinlich aber gaaanz am anfang vor allem aufgerufen, von daher musst du da drin dann wohl das feld dimensionieren.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 26.11.2005, 13:40    Titel: Antworten mit Zitat

War einer meiner ersten Lösungsansätze, aber:

Fehler-Nr: 59
Illegal in a SUB or FUNCTION, found: 'SHARED'

No Way...


Evtl funzts mit COMMON SHARED, das zählte ja unter QB zu den nicht-ausführbaren Anweisungen, und hat auch unter FB noch Sonderstellungen...

//Edit:
Dieser Code funktionert:
Code:
Declare Sub Foo

Common Shared A()

GetKey

Sub Foo Constructor
   Redim A(5)
   ? Ubound(A)
End Sub

_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

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

kanst du das so benutzen:
oder geht das ned?

sub foo constructor
static var()
end sub
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 26.11.2005, 14:10    Titel: Antworten mit Zitat

Sicher, innerhalb der Constructor wäre das Array dann verfügbar, aber ich brauche ein Globales, und ein Static Shared existiert nicht.
Anyway, Die COMMON-Methode ist ganz passabel.

Dennoch sollte man das evtl. den Devs melden?
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 26.11.2005, 15:33    Titel: Antworten mit Zitat

red auf jeden fall ma mit denen, vllt können dies dir erklären wies genau abläuft.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 26.11.2005, 23:25    Titel: Antworten mit Zitat

Hatte in meinem Projekt ähnliche Probleme mit den Includeten Subs.

Der Vollständigkeit halber zu
Programmteile mittels INCLUDE in ein Listing einbinden :

Im Hauptprogramm entscheidet die Reihenfolge der Angaben, was in den Subs zur Verfügung steht.
ein
Code:

'$Include: 'Zusatzdatei.bas'
DECLARE SUB Irgendwas()
DIM WasWeisIch$(100)

führt dazu, das die Programmzeilen in Zusatzdatei.bas keine Ahnung von dem Gedimmten WasWeisIch$ haben ! Ebenfalls unbekannt ist die SUB Irgendwas ! (so wars bei mir, FreeBasic0.14b-WIN)

Richtig müßte das Heißen:
Code:

DIM WasWeisIch$(100)
DECLARE SUB Irgendwas()
'$Include: 'Zusatzdatei.bas'

Jetzt ist von Zusatzdatei.bas aus die Sub ansprechbar und auch die WasWeisIch$(1 bis 100) sind vorhanden.
========================================

Das SHARED innerhalb einer SUB hab ich grad vorhin als Stolperfalle in nem Alten Prog gehabt.
In der FreeBasic-Hilfe steht auch was, das SHARED nur im Hauptprogramm zu stehen hat.
==> COMMON SHARED am Anfang des Programms macht die Variable für sämtliche SUBs zugänglich.

(ja ja, und wenn man das Include dann nach dem Common-Shared bringt, ist auch in der Zusatzdatei.bas die Variable greifbar.....)

========================================

Wenn man in der Zusatzdatei.bas Statische Variablen in den Subs braucht ist ja der erste Gedanke:
Code:

REM DATEI: Zusatzdatei.bas = zum Includen in andere Listings

SUB Unterroutine()

   STATIC StatischeWerteBox%(100)

   '.....Routinenbefehle...
END SUB


So funktioniert das auch.

Aber eine Stolperfalle ist auch drin ! mit:
Code:

REM DATEI: Zusatzdatei.bas = zum Includen in andere Listings

SUB Unterroutine()
   Feldgroesse%=100
   STATIC StatischeWerteBox%(Feldgroesse%)

   '.....Routinenbefehle...
END SUB


wird nicht statisch gedimmt! beim nächsten Aufruf dieser Routine sind die erzeugten Inhalte aus dem vorigen Aufruf nicht mehr da!

ERKLÄRUNG: Wird in der SUB mittels einer direkten Zahl (z.B.100) als Feldgroeße statisch gedimmt, erfolgt dies auch statisch. Wird die Feldgroeße aber per Variable (Feldgroesse%) angegeben wird Dynamisch gedimmt !

Hm. Diese Hürde entsteht, wenn man beim Programmieren noch nicht wissen kann, wie groß das Array werden muß. Wenn der Anwender des Programms durch seine Eingaben die Größe des Arrays erst festlegt.

LÖSUNG: in einem früheren Post hat mir mjs (im letzten drittel der ersten Seite des Threads) dann erklärt, daß, und wie das trotzdem geht!
(suche nach: Statische Arrays in SUBs Dynamisch declarieren im FreeBasic-Forum
oder klicke http://forum.qbasic.at/viewtopic.php?t=1641&postdays=0&postorder=asc&start=0)

Hoffe diese Tipps können helfen

Euer Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
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