Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 26.10.2007, 23:24 Titel: Arrays ByRef übergeben!? [gelöst] |
|
|
Hallo!
Ich habe ein riesiges Problem:
Wenn ich versuche das hier zu kompilieren Code: | DECLARE function MySub lib "lol" alias "MySub" (BYVAL a AS INTEGER, _
BYREF b() AS INTEGER) as integer
DIM AS INTEGER a = 1, b(0 to 1) = {1,0}
PRINT "Vor Subaufruf:"
PRINT "a = "; a
PRINT "b = "; b(1)
PRINT
MySub a, b()
PRINT "Nach Subaufruf:"
PRINT "a = "; a
PRINT "b = "; b(1)
function MySub (BYVAL a AS INTEGER, _
BYREF b() AS INTEGER) as integer export
a += 1
b(1) += 1
PRINT "In der Sub:"
PRINT "a = "; a
PRINT "b = "; b(1)
END function
|
Meldet der Compiler folgende Fehlermeldung:
Code: | M:/byref.bas(2) error 56: Illegal specification, at parameter 2 (b) of MySub() in 'BYREF b() AS INTEGER) as integer'
M:/byref.bas(18) error 56: Illegal specification, at parameter 2 (b) of MySub() in 'BYREF b() AS INTEGER) as integer export'
M:/byref.bas(25) warning 14(0): Function result was not explicitly set |
Hääääää?
(Ist zwar nicht der orig. Source, aber selbe Fehlermeldung, praktisch selbe Decl.) _________________ If hilfreicher_Beitrag then klick(location.here)
Klick
Zuletzt bearbeitet von csde_rats am 26.10.2007, 23:53, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 26.10.2007, 23:41 Titel: |
|
|
Ich finde jetzt den Fehler nicht (habe bisher noch keine Arrays übergeben), aber hilft es, stattdessen einen Pointer zu übergeben? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 26.10.2007, 23:53 Titel: |
|
|
Hallo,
ich habe neulich auch wegen der Arrayübergabe auf dem Schlauch gestanden. Die Lösung ist: Da Arrays in neueren Versionen von FB immer BYREF übergeben werden, ist eine Deklaration mit BYREF nicht nur unnötig, sondern gar nicht zulässig. Für die Arrayübergabe ist also nur z.B.
Code: | DECLARE SUB Toaster (Toasts() As String) |
nötig.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.10.2007, 00:15 Titel: |
|
|
Zitat: | Da Arrays in neueren Versionen von FB immer BYREF übergeben werden, ist eine Deklaration mit BYREF nicht nur unnötig, sondern gar nicht zulässig. |
Soweit ich weiß wurden arrays schon IMMER byref übergeben, nicht nur in den neueren Versionen. In den alten war das Schlüsselwort Byref bei Arrays erlaubt, Byval dagen nicht(wenn mich nicht alles täuscht). _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.10.2007, 01:05 Titel: |
|
|
wer wäre auch so blöd und kopiert ein ganzes array bei jedem subaufruf Oo _________________ "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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
|