Func Probleme

  • Hey Ho!

    Ich habe ein Problem mit meiner Funktion die ausgelagert ist.

    Spoiler anzeigen

    Die Konsole sagt mir : ==> "Func" statement has no matching "EndFunc".:

    Wo ist hier das Problem?

    :):):):)

    Eine Antwort :D

  • Wo ist hier das Problem?

    Dass du nicht das komplette Script gepostet hast....

  • Hast du deinen Beispielcode mal in eine eigene Datei gepackt und geschaut was passiert? Da wirst du sehen, dass das kein Problem gibt...

    Wenn du nicht gen ganzen Code posten kannst, kann dir niemand helfen. Laut dem Errorcode ist der Fehler offensichtlich, sofern du der englischen Sprache mächtig bist.

    Formatierungsfehler.

    Grüße Yaerox

    Grüne Hölle

  • Ja ich spreche English,

    Im ganzen gesagt , ich
    Verwende eine Func in der noch eine Func agieren soll.

    Zeige einen Bsp.

    Spoiler anzeigen
    AutoIt
    _Func()
    
    
    Func _Func()
    #include <test.au3>
    _2func()
    Endfunc

    Aus der zweiten datei.

    Spoiler anzeigen
    AutoIt
    Func 2func()
    
    
    msg(0,"oke","oke")
    Endfunc

    So im Kurzen Kann ggf. einen Test Script anfügen. Was ich gleich machen werde.

    :):):):)

    Eine Antwort :D

  • Entfern trotzdem das Include aus der Funktionsdefinition und schieb es ganz normal an den Skriptanfang.
    Sollten in der include'ten Datei zB Funktionsdefinitionen sein crasht das wieder.

  • Relativ es Funktioniert da ich wie folgt das Script habe:


    Reicht ja auch =)

    :):):):)

    Eine Antwort :D

  • Aaaaaaaaaalso (holen wir mal ganz weit aus).

    1. Includes gehören in die ersten Zeilen des Skripts.
    - Sie können direkt am Anfang nach einem optionalen #Include-Once oder einem #RequireAdmin oder sonstigen Wrapper Anweisungen stehen.
    - Sie können NACH Globalen Variablen stehen

    2. #Include <Skript.au3> Kopiert den kompletten inhalt der Datei Skript.au3 an die Stelle an der #include <Skript.au3> steht.
    - Das heißt, dass Funktionen, sowie Globale Variablen des Includes an diese Stelle kopiert werden.
    - Globale Variablen KÖNNEN in einer Funktion deklariert werden, sollten sie aber nicht.
    - Funktionen können nur außerhalb von Funktionen deklariert werden.

    3. Beispiel

    Hier das Include (ein Skript welches eingebunden werden kann)

    AutoIt: Include.au3
    Global Const $__i_IchBinEineKonstante = 5
    Func GetConst()
    	Return $__i_IchBinEineKonstante
    EndFunc


    Hier das Dazugehörige Skript

    AutoIt: Skript.au3
    #include 'Include.au3'
    
    
    MeineFunktion(GetConst())
    
    
    Func MeineFunktion($sString)
    	ConsoleWrite($sString & @CRLF)
    EndFunc


    Bei der Ausführung wird daraus folgendes:

    Dieser Programmcode ist problemlos Lauffähig.

    Benutzt man aber folgendes:


    So wird beim Ausführen etwas zusammengesetzt was nicht funktionieren kann:

    Im falsch zusammengesetzen Skript wird eine Funktion in einer Funktion deklariert, deshalb gibt es einen Fehler. Die Globale Konstante kann man natürlich da lassen wo sie ist, dieses Vorgehen ist grob fahrlässig und verursacht (je nach Arrangement und Einstellungen) eine Interpreterwarnung, aber das Skript ansich wird damit laufen

    Also merken: Includes gehören an den ANFANG Des skripts. Es gibt soetwas wie optionale Includes nicht, da logischerweise alles, auch wenn es nur eventuell gebraucht wird im Programm eingebunden sein muss.

    So einen langen Beitrag schreibe ich selten, lies ihn solange durch bis du ihn verstanden hast.

    lg
    M

  • Im sinne Agiert mein Script aber so:


    Damit verhindere ich das die variablen gleich bleiben die dann in der ausgelagerte datei steht.
    Fertig, es Funktioniert wie es Funktionieren muss.

    :):):):)

    Eine Antwort :D

  • Wenn du im Include keine Funktionsdefinitionen hast dann ist wie ein C/C++ Makro und sozusagen ein Hack also vollkommen okay.