Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
03/08/10 10:15
nostradamus1915
Ciao a tutti, sto provando a creare un array di oggetti in VB 2008. Vi spiego come ho fatto:

1. Ho creato una nuova classe di nome pezzo
Public Class pezzo
Public x, y, tipo As Integer
Public alive As Boolean
Public move(8, 8) As Boolean
Public colour As Char
End Class

2. Ho dichiarato le variabili globali all'interno del modulo
Module mod
Public vmpb(2, 8) As pezzo
Public vmpn(2, 8) As pezzo
Public scacc As scacchiera
End Module

3. Infine ho eseguito le diverse operazioni di assegnazione nel form
Dim i, k As Integer
For i = 1 To 2
For k = 1 To 8
vmpb(i, k).alive = True
vmpn(i, k).alive = True
vmpb(i, k).colour = "b"
vmpn(i, k).colour = "n"
vmpb(i, k).x = i
vmpb(i, k).y = k
vmpn(i, k).x = i + 7
vmpn(i, k).y = k
Next
Next

Il problema si verifica quando eseguo il programma. Infatti mi viene richiesto di inserire new affianco alla dichiarazione dell'oggetto, quindi Public vmpb(2, 8) As NEW pezzo, ma, quando vado ad apportare la modifica, mi dice che per un array non può essere usata l'istruzione new. Come posso fare? Spero possiate aiutarmi, grazie.
aaa
03/08/10 10:52
mattia1481
Non si possono inizializzare delle matrici a dimensione fissa...devi prima inizializzare la matrice:

Dim MiaMatrice(-1,-1) As New MioOggetto

dopo aggiungi nuove istanze di MioOggetto a MiaMatrice.
aaa
03/08/10 11:59
nostradamus1915
Scusa la domanda (sono ancora un beginner in visual basic), ma come faccio a ridimensionare la matrice?
Dopo

Module cazzeggio_di_variabili
Public vmpb(-1, -1) As pezzo
Public vmpn(-1, -1) As pezzo
Public scacc As scacchiera
End Module

cosa devo fare?
aaa
03/08/10 14:10
mattia1481
Dim N as Integer = 9
Dim Q as Integer = 5

System.Array.Resize(vmpb, N)

For i As Integer = 0 To N-1
System.Array.Resize(vmpb(i), Q)
Next

Otterrai :

vmpb(8, 4)
aaa
03/08/10 14:54
nostradamus1915
Mi dice che gli array non possono essere dichiarati con new, inoltre mi da 2 errori rispettivamente nelle righe di codice 3 e 5.

Error    7    Data type(s) of the type parameter(s) in method 'Public Shared Sub Resize(Of T)(ByRef array() As T, newSize As Integer)' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.    C:\Documents and Settings\Simone\Documenti\Visual Studio 2008\Projects\scacchi\scacchi\Form1.vb    55    9    scacchi

Error    8    Data type(s) of the type parameter(s) in method 'Public Shared Sub Resize(Of T)(ByRef array() As T, newSize As Integer)' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.    C:\Documents and Settings\Simone\Documenti\Visual Studio 2008\Projects\scacchi\scacchi\Form1.vb    57    13    scacchi

aaa
03/08/10 15:02
mattia1481
scusa...

Dim MiaMatrice(-1,-1) As MioOggetto


poi fai tutto il resto che ti ho scritto
aaa
03/08/10 15:11
nostradamus1915
Niente da fare, copiando i codici in maniera identica a come li hai scritti vengono fuori questi 2 errori.

Error    7    Data type(s) of the type parameter(s) in method 'Public Shared Sub Resize(Of T)(ByRef array() As T, newSize As Integer)' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.    C:\Documents and Settings\Simone\Documenti\Visual Studio 2008\Projects\scacchi\scacchi\Form1.vb    55    9    scacchi

Error    8    Number of indices is less than the number of dimensions of the indexed array.    C:\Documents and Settings\Simone\Documenti\Visual Studio 2008\Projects\scacchi\scacchi\Form1.vb    58    37    scacchi
aaa
03/08/10 17:09
nostradamus1915
Il codice che mi hai dato tu, ossia

Dim N as Integer = 9
Dim Q as Integer = 5

System.Array.Resize(vmpb, N)

For i As Integer = 0 To N-1
System.Array.Resize(vmpb(i), Q)
Next

funziona solo con gli array unidimensionali.
aaa