|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kiffi
Anmeldungsdatum: 04.02.2005 Beiträge: 8
|
Verfasst am: 12.12.2014, 13:51 Titel: Sub oder Function als Parameter übergeben |
|
|
Hallo,
wie kann man einer Sub (unten im Code: Sub Test()) eine Sub oder Function übergeben?
Code: | SUB plus (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER)
PRINT o1 + o2
END SUB
SUB Test(CB As SUB)
DIM AS INTEGER o1 = 1
DIM AS INTEGER o2 = 2
CB(o1,o2) ' error 7: Expected ')', found 'o1' in 'CB(o1,o2)'
END SUB
Test(@plus) ' Error: Passing different pointer types, at parameter 1 (CB) of TEST()
SLEEP |
Danke im voraus & Grüße ... Peter |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 12.12.2014, 14:15 Titel: Signatur der übergebenen SUB/FUNCTION komplett |
|
|
Hi Peter,
ich habe das gerade mal ausprobiert: So funktioniert es bei mir:
Code: | SUB plus (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER)
PRINT o1 + o2
END SUB
SUB minus (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER)
PRINT o1 - o2
END SUB
SUB Test(CB As SUB (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER))
DIM AS INTEGER o1 = 1
DIM AS INTEGER o2 = 2
CB(o1,o2)
END SUB
Dim operation As Sub (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER)
operation = @plus
'operation = @minus
Test(operation)
SLEEP |
Viele Grüße & ein schönes Wochenende!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 12.12.2014, 14:17 Titel: |
|
|
So ist es richtig! OH ich seh grad, gleichzeitig geposted. Code: | SUB plus (BYVAL o1 AS INTEGER, BYVAL o2 AS INTEGER)
PRINT o1 + o2
END SUB
Sub Test(CB As Sub(ByVal As Integer,ByVal As Integer))
DIM AS INTEGER o1 = 1
DIM AS INTEGER o2 = 2
CB(o1,o2) ' error 7: Expected ')', found 'o1' in 'CB(o1,o2)'
END Sub
Test @plus
Sleep |
Allerdings würde ich es etwas anders machen, guck dir auch nochmal die freebasic Hilfe zu "pointer to procedures" an.
Code: | Type operation As Function (As Integer, As Integer) As Integer
Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
Function DoOperation (a As Integer, b As Integer, op As operation) As Integer
Return op(a, b)
End Function
Print "3 + 4 = " & DoOperation(3, 4, @Add)
Sleep |
Vielleicht schaust du dir dies auch noch an:
http://www.freebasic.net/forum/viewtopic.php?f=3&t=22447&start=30#p202035
Ich verknüpfe einen String mit Hilfe einer Hashtabelle mit einer Funktion, sodass man die Funktion auch über einen String aufrufen kann. |
|
Nach oben |
|
|
Kiffi
Anmeldungsdatum: 04.02.2005 Beiträge: 8
|
Verfasst am: 12.12.2014, 14:51 Titel: Re: Signatur der übergebenen SUB/FUNCTION komplett |
|
|
Hallo Sebastian,
hallo RockTheSchock,
vielen Dank für die schnelle Hilfe! Das bringt mich schon mal ein gutes Stück weiter.
RockTheSchock hat Folgendes geschrieben: | Vielleicht schaust du dir dies auch noch an: [...] |
Kann ich in meinem speziellen Fall leider nicht anwenden. Dennoch Danke für den Hinweis!
Grüße ... Peter |
|
Nach oben |
|
|
|
|
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.
|
|