Hallo wer-weiss-was Nutzer,
ich bin ein Neuling in Visual Basic (habe vorher Java Programmiert) und versuche mich gerade durch die Semantik zu quälen.
Ich habe im Moment folgendes Problem:
Ich will einer Funktion ein 2d Array übergeben
Dim EntfernungenInit1 As EntfernungenInit
Dim entfernungInit As Variant
Dim entfernungen(1 To 17, 1 To 17) As Integer
Set entfernungInit = EntfernungenInit1.Initialisieren(entfernungen)
Diese Funktion gibt das beschriebene Array wieder zurück.
Klasse EntfernungenInit
Public Function Initialisieren(entfernungen As Variant) As Integer()
'… Array wird mit Werten beschrieben
Initialisieren = entfernungen
End Function
Jetzt bekomme ich die Fehlermeldung vom Compiler, dass in der Zuweisung
Set entfernungInit = EntfernungenInit1.Initialisieren(entfernungen)
ein Objekt erforderlich ist. Aber ich gebe doch den Verweis auf das Array wieder aus der Funktion zurück.
Ich habe viel mit der Typisierung der Variablen und der Formulierung des Aufrufes und der Funktion gespielt und bin trotzdem zu keinem Ergebnis gekommen.
Ihr würdet mir echt helfen, wenn Ihr den Fehler erkennt.
Gruß
Toolsche
Hallo,
ich muss leider passen, habe schon lange nichts mehr mit VB gemacht, sorry.
VG,
Stefan
Hallo Zusammen,
ich habe gerade auch gesehen, dass ich den New Operator bei der Bildung neuer Objekte vergessen hatte. Aber die Fehlermeldung bleibt gleich. Es kann doch nicht so schwer sein, ein 2d Array von Funktion zu Funktion zu übergeben.
Hallo Toolsche,
entfernungInit kannst du statt variant auch als entfernungInit() as integer deklarieren.
als rückgabewert der funktion initialisierung musst du den typ variant verwenden.
alternativ kannst du auch einen pointer auf dein array als parameter übergeben:
Public Function Initialisieren(entfernungen As Variant, ByRef lpResult() as Integer) As Boolean
'… Array wird mit Werten beschrieben
lpResult = entfernungen
Initialisieren = True 'erfolgreich
End Function
„Set“ ist nur zur zuweisung von objekten; ein Array ist kein objekt.
beispiel objekt:
dim oWS as Object
set oWS = createobjec(„WScript.Shell“)
Gruß
Philipp
Hallo Philipp,
den Rückgabewert habe ich inzwischen auf Integer() gesetzt und es funktioniert.
Ich war von Java gewöhnt, dass ein Array, wie auch Objekte , über Referenzen angesprochen werden. Deshalb der Versuch, über Set eine Lösung zu finden.
Was deinen zweiten Vorschlag angeht, so habe ich aber noch eine Frage.
Wie genau setze ich den Pointer und könnte ich den Pointer nicht schon vorher setzen? Dann könnte ich nur den Pointer übergeben und darüber das Feld beschreiben. Denn ein Pointer dürfte ja nichts anderes sein, als eine Referenz auf das Feld bzw den Speicherplatz.
Und zum Schluss wäre ich dir dankbar, wenn du mir ein gutes Buch oder eine gute Website empfehlen könntest, um das alles nachzulesen.
Danke und Viele Grüße
Toolsche
Hi,
der Fehler hat so wie ich es sehe nichts mit Typisierung zu tun. Das Objekt „EntfernungenInit1“ wird nicht instanziiert. Mit der Zeile
Dim EntfernungenInit1 As EntfernungenInit
wird nur eine Referenz auf ein Objekt des Typs „EntfernungenInit“ erzeugt und kein Objekt.
Korrekt müsste es heißen
Dim EntfernungenInit1 As new EntfernungenInit
bzw.
Dim EntfernungenInit1 As EntfernungenInit
EnterfernungenInit1 = new EntfernungenInit
Ich hoffe, das hilft dir weiter. Ich war in Urlaub, daher die späte Antwort…
Grüße
Andreas