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:

Fehler beim aufrufen einer Sub weiß aber nicht wie .

 
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
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 26.10.2007, 22:09    Titel: Fehler beim aufrufen einer Sub weiß aber nicht wie . Antworten mit Zitat

Hallo,

ich bekomme immer eine Fehlermeldung wenn ich eine Sub aufrufen will.

Hier mal den Code wo declariert wird und so:

Code:


Declare SUB umfangvier (y as double, x as integer)

SUB umfangvier (y as double, x as integer)

... ... ... ...

Hier wird sie aufgerufen:

Code:


If eing = "1" then
    SUB umfangvier (y as double, x as integer)
end if


Dann kommt immer der Fehler: error 86: Illegal inside a compound statement or scoped block, found 'SUB' in 'SUB umfangvier (y as double, x as integer)'

Was will der da von mir ? geschockt

mfg

Franz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



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

BeitragVerfasst am: 26.10.2007, 22:17    Titel: Antworten mit Zitat

du hast da irgendwas grundsätzlich falsch verstanden.. Oo

Code:
sub blablubb(x as integer, y as integer)
  print x*y
end sub


.. code bla ..
dim a as integer
dim b as integer
a = 1234
b = 2345
blablubb(a,b)
.. code bla ..

_________________
"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
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 26.10.2007, 22:23    Titel: Antworten mit Zitat

Hmm...

Na gut poste ich mal alles:
Code:

Declare SUB umfangvier (y as double, x as integer)
Dim x as single
Dim y as single

SUB umfangvier (y , x)
   
for x = 1 to 260
   
     Line (80,100 +  x)-(80,90 + x)
    Line (560,360 -  x)-(560,350 - x)
   
   
for y = 1 to 990000
next y
next x

for x = 1 to 500
    Line (570 - x,100)-(570 - x,100)
    Line (70,350)-(70 + x,350)
for y = 1 to 950000
    next y
next x



End SUB


Quellcode......
Sub aufrufen:
Code:

If eing = "1" then
    SUB umfangvier (y as double, x as integer)
        end if
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.10.2007, 22:38    Titel: Antworten mit Zitat

Code:
Declare SUB umfangvier (y as double, x as integer)
Dim x as single
Dim y as single

SUB umfangvier (y as double , x as integer)
   
for x = 1 to 260
   
    Line (80,100 +  x)-(80,90 + x)
    Line (560,360 -  x)-(560,350 - x)
   
    ' Was soll das denn?
    ' for y = 1 to 990000
    ' next y
    ' Verzögerungen funktionieren mit SLEEP <ZeitInMillisekunden>
next x

for x = 1 to 500
    Line (570 - x,100)-(570 - x,100)
    Line (70,350)-(70 + x,350)
    'for y = 1 to 950000
    'next y
next x

End SUB


Korrigierter Aufruf-Quellcode:
Code:
If eing = "1" then
    umfangvier 123, 123
end if


Ich kann mich da MisterD nur anschließen. Du solltest dir unbedingt mal die Einsteigertutorials auf FreeBasic-Portal.de und die Befehlsreferenzeinträge zu SUB usw. durchlesen. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 26.10.2007, 22:47    Titel: Antworten mit Zitat

Cool danke jetzt gehts !

Der Fehler war nur der Aufruf der Sub ?
Mit sleep habe ichs auch schon probiert, aber das mir leider etwas zu langsam.

Die Tutorials unter Freebasic-portal hab ich gelesen aber keine Antwort gefunden.

neutral
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 26.10.2007, 23:46    Titel: Antworten mit Zitat

Das Schlüsselwort SUB brauchst du nur, um eine SUB zu deklarieren bzw. zu definieren. Beim Aufruf wird das Schlüsselwort nicht mehr verwendet.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 27.10.2007, 21:34    Titel: Antworten mit Zitat

Eine letzte Frage hätte ich, aber noch.

Warum ruft man die Sub auf und schreibt für jeden Parameter ein 123 ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 27.10.2007, 21:46    Titel: Antworten mit Zitat

Hast du dir das hier schon mal durchgelesen?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 27.10.2007, 21:46    Titel: Antworten mit Zitat

Hä? Warum? Das müsstest du als Autor der Sub doch am Besten wissen. Zunge rausstrecken
Sebastian's Code war nur ein Beispiel für ein Programm, das die Sub verwendet. Insofern war auch der Integer 123 nur ein Beispiel.

Btw, wenn du solche For-Next-Schleifen als Pause verwendest, wirst du auf jedem Computer unterschiedlich lange Warteschleifen haben. Das kann mitunter ganz schön stark schwanken! Deshalb solltest du wirklich lieber entweder Sleep verwenden (arbeitet in FB mit Millisekunden, nicht wie in QB mit Sekunden!), ggf. mit dem zweiten Parameter 1, der es verhindert, die Wartezeit mit einem Tastendruck zu verkürzen. Oder sonst auch mit einer Do-Loop-Schleife und Timer-Auswertung, aber da seh ich jetzt nicht 'nen wirklichen Vorteil gegenüber der Sleep-Variante.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 27.10.2007, 22:13    Titel: Antworten mit Zitat

Ja das hab ich mir schon mal durchgelesn aber ich sehe da keine Antwort auf meine Frage. neutral
_________________
Guckt nicht nur den Link an, besuch ihn auch mal !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 27.10.2007, 22:20    Titel: Antworten mit Zitat

Aber, was Variablen und Parameter sind weißt du schon, oder?
(optionale Parameter habe ich hier vorsichtigerweise mal ausgelassen)happy
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Franz



Anmeldungsdatum: 24.03.2007
Beiträge: 111
Wohnort: Auf ner DVD ich bin nur ein Programm

BeitragVerfasst am: 27.10.2007, 22:28    Titel: Antworten mit Zitat

Ja ich denke schon...

In Variablen kann ich Werte speichern.
Mit Parametern doch auch oder ? verlegen
_________________
Guckt nicht nur den Link an, besuch ihn auch mal !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 28.10.2007, 12:30    Titel: Antworten mit Zitat

Lies dir am Besten doch mal die Tutorials hier durch. Jedenfalls die relevanten, Anfänger-Tutorials 1-4.
/edit:
Link http://www.freebasic-portal.de/index.php?s=tutorials
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
creepi



Anmeldungsdatum: 13.06.2010
Beiträge: 59

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

hi,
ich habe ein ähnliches problem
Erhalte als fehler meldung zb:
Code:
error 86: Illegal inside a compound statement or scoped block, found 'Declare' in 'Declare Sub TSNE_Disconnected   (ByVal V_TSNEID as UInteger)
...........

der code
Declare Sub TSNE_Disconnected   (ByVal V_TSNEID as UInteger)
Declare Sub TSNE_Connected      (ByVal V_TSNEID as UInteger)
Declare Sub TSNE_NewData        (ByVal V_TSNEID as UInteger, ByRef V_Data as String)
)


Wenn ich das Script an sich ausführe funktioniert es.
Include ich es kommt der fehler, ich kanns mir nicht erklären.

Der code ist 1:1 übernommen, nur eben im programm per include und andere .bas filename eingefügt.
Die TSNE_V3 blieb unberühert.
Genutzt wurde die http-client variante.

Fehler durchs includen?
Hab die declare funktion ins hauptprogramm weiter oben verfrachtet anstatt weiter unten durch include. Da kam dann die SUB fehler meldung...
Code:
error 86: Illegal inside a compound statement or scoped block, found 'Sub' in 'Sub TSNE_Disconnected(ByVal V_TSNEID as UInteger)
...........

der code
Sub TSNE_Disconnected(ByVal V_TSNEID as UInteger)


Fehlermeldungen ziehen sich in länge was entweder Declare oder eben Sub betrifft.

verlegen


EDIT
problem gelöst happy
Hab den code einfach mal vorne eingebaut und dann kam keine fehler meldung. Dann nochmal da eingebaut wo es war und Sie kam wieder.
Die Lösung? Hab mal ein ' vor Do und ein ' vor Loop gemacht und es ging.
Einfach komplett in eine schleife packen is wohl nicht ; D

Muss ich mal schauen wie ich es löse aber immerhin fehler behoben und da hab ich jetzt so lang dran gesessen ne ne ne, nächste mal frag ich früher

(manchmal kann es hilfreich sein was in den raum zu werfen) grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 28.05.2011, 14:22    Titel: Antworten mit Zitat

Das Problem ist wohl gewesen, dass du ein DECLARE nicht in eine Schleife packen kannst (das ist mit der Fehlermeldung 'llegal inside a compound statement or scoped block' gemeint); ein DECLARE muss sich immer auf oberster Modulebene befinden. Wenn sich in einer mit #INCLUDE eingebundenen Datei DECLARE-Zeilen befinden, darf dieses #INCLUDE natürlich auch nicht in einer Schleife stehen (was auch Sinn macht, weil du die Datei vermutlich nicht immer und immer wieder einbinden willst).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 28.05.2011, 14:30    Titel: Antworten mit Zitat

Auch wenn es nemored schon erklärt hat, hier nochmal ein Codebeispiel, dass den Fehler ebenfalls erzeugt:

Code:
For i As Integer = 0 To 5
   Declare Sub foo (ByVal bar As Integer)
Next

For j As Integer = 0 To 5
   Sub foo (ByVal bar As Integer)
      '
   End Sub
Next


Wie gesagt dürfen Subs (und auch Functions) und deren Declare nicht innerhalb Anweisungsblöcken liegen. Das gilt für alle Blöcke, die einen Scope erzeugen. Andere Blöcke wie Type (nur Declare) oder Namespace lassen das aber schon zu.
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