flyingace
Messages postés5Date d'inscriptionmardi 26 août 2003StatutMembreDernière intervention20 octobre 2003
-
20 oct. 2003 à 11:25
cs_PhilippeE
Messages postés437Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention10 août 2010
-
20 oct. 2003 à 16:28
Je voudrais faire une librairie regroupant quelques structure de données 'avancé' absente dans visual basic , dont l'utilisation serait simple et intuitive. Pour le moment ca permet d'utiliser des listes et des tableaux associatifs.
Pour définir tout cela j'utilise des modules de classes permettant de gérer mes structures de données à l'aide d'objets.
Pour la commodité d'utilisation je mime déjà le comportemment d'un constructeur pour mes objets (un constructeur qui prend des arguments ...) . J'ai des méthodes d'ajout de données, d'accès aux données, mais (aussi pour la beauté du code) j'aurais voulu simuler la présence d'un iterateur, et là il y a comme un pb, je m'explique avec du code:
Soit une petit liste objet de double simplifiée:
//Ca c'est la class d_list
private tab_ as Double
private size_ as integer
private iterator_ as integer
public iterator_bis
Private Sub Class_Initialize()
min_ = 0
size_ = 1
ReDim tab_(0)
tab_(0) = cdbl(0)
End Sub
public sub dlist(size__ as integer, val__ as double)
Dim i as integer
size_ = size__
Redim tab_(size_ - 1)
for i=0 to siz_ - 1
tab_(i) = val__
next i
max_ = size - 1
end sub
property get item (rank__ as integer) as double
'// Controle de rank__ pour éviter tout dépassement
' ...
item = tab_(rank__)
end property
property let item (rank__ as integer, value__ as double) item tab_(rank__) value__
end property
property let iterator(iterator__ as integer)
iterator_ = iterator__
end property
property get value() as double
value = tab_(iterator_)
end property
property get value_bis() as double
value2 = tab_(iterator_bis)
end property
property get min() as integer
min = 0
end property
property get max() as integer
max = size_
end property
'//Ca c'est le code qui l'utilise
public sub main()
Dim my_dlist as new d_list
Dim i as integer
my_dlist.dlist(10, cdbl(0))
for i = 0 to 9
my_dlist.item(i) = i
next i
'//Ca ca marche.
my_dlist.iterator = 5
msgbox my_dlist.value
'//Ca aussi
my_dlist.iterator2 = 6
msgbox my_dlist.value2
'//Ca aussi
for my_dlist.iterator= my_dlist.min to my_dlist.max
msgbox my_dlist.value
next my_dlist.iterator
for my_dlist.iterator2 = my_dlist.min to my_dlist.max
msgbox my_dlist.value2
next my_dlist.iterator2
'// Mais la ca marche pas !!! pour aucune des deux boucles.
end sub
J'ai peur qu'il s'agisse d'un problème ésotérique, quelqu'un peut il me confirmer mes affreux doutes. ?
cs_PhilippeE
Messages postés437Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention10 août 20102 20 oct. 2003 à 16:28
L'aide de VB est claire à ce sujet :
You tried to use a nonvariable as a loop counter in a For...Next construction.
Use a variable as the counter.
En résumé : variable obligatoire, pas d'expression, pas de tableau, pas de propriété.
Par contre pour les listes d'objets, tu peux t'en tirer avec les collections ... et là tu as pour un parcours complet avec l'instruction For Each ... Next