Visual Basic: Übergabe von mehrdimensionalen

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