Seite 1 von 1

Reihenfolge Includes [Gelöst]

Verfasst: 16.11.2013 14:38
von Micky91
Kann sein das ich hier ein Verständnisproblem habe.
Ich habe das Formular und viele meiner Funktionen (Procduren) in einzelen Dateien ausgelagert, zur besseren Übersicht.
Im der Hauptdatei werden diese dann mit XInclude geladen.
Derzeit wird als erstes die Datei mit dem Formular und der Event-Schleife geladen. Dann die Datei mit den restlichen Funktionen (Proceduren)
In der Event-Schleife wird unter anderem eine Procedur die in der Funktionen-Datei steht aufgerufen werden.
Wieso will der Compiler schon beim Laden der Dateien die Existenz der Proceduren überprüfen? Die werden doch noch gar nicht ausgeführt, sonder nur inkludiert!?
Oder mache ich grundlegend etwas falsch?

Re: Includes

Verfasst: 16.11.2013 14:42
von ts-soft
>> Wieso will der Compiler schon beim Laden der Dateien die Existenz der Proceduren überprüfen?
Der Compiler führt als erstes alle Dateien zu einer zusammen, also muß auch die Reihenfolge der
Prozeduren stimmen, bzw. sind bei ungünstiger Reihenfolge Declare-Statesment erforderlich.

Es gelten dieselben Regeln, wie bei einer einzelnen Datei!

Gruß
Thomas

Re: Includes

Verfasst: 16.11.2013 14:44
von RSBasic
Was meinst du damit genau?
Bekommst du zufälligerweise solche Meldung?
PureBasic hat geschrieben: Zeile 123: DeineLieblingsProcedure() ist keine Funktion, Array, Makro oder LinkedList.
Wenn ja, dann liegt es daran, dass im Code auf eine bestimmte Prozedur zugegriffen wird, die aber erst später definiert wird.
Um das zu verhindern, gibt es zwei Möglichkeiten:
  • Reihenfolge der Prozeduren anpassen
  • Vorzeitiges Deklarieren mit Declare
\\Edit:
Zu langsam.

Re: Includes

Verfasst: 16.11.2013 14:55
von Micky91
Genau.

Code: Alles auswählen

Zeile 73: ImportListe() is not a function (or not available in demo version), array, list, map or macro.
Ich hätte jetzt erwartet das ihm das erstmal egal ist da dieser Aufruf sich innerhalb einer Procedur befindet, letztendlich wird diese Procedur mit der Event-Schleife ja erst fast am Ende des Quelltextes aufgerufen, wenn alle anderen Quelltextteile inkludiert sind.

Re: Includes

Verfasst: 16.11.2013 15:03
von RSBasic
Wahrscheinlich meinst du etwa so:

Code: Alles auswählen

EnableExplicit

Procedure A(Variable)
  B(Variable)
EndProcedure

Procedure B(Variable)
  
EndProcedure

A(0)
A() greift auf B() zu, was aber erst später definiert wird, wobei A() erst am Ende aufgerufen wird. Trotzdem muss man wissen, dass der Code nur einmal durchgehend überprüft wird und nicht mehrfach.
Um das Problem beheben zu können, musst du beispielsweise folgendes tun:

Code: Alles auswählen

EnableExplicit

Declare B(Variable)

Procedure A(Variable)
  B(Variable)
EndProcedure

Procedure B(Variable)
  
EndProcedure

A(0)

Re: Includes [Gelöst]

Verfasst: 16.11.2013 15:14
von Micky91
Ja genau so ist es.
Danke fürs Aufklären :allright: