Vb & programmation objet

flyingace Messages postés 5 Date d'inscription mardi 26 août 2003 Statut Membre Dernière intervention 20 octobre 2003 - 20 oct. 2003 à 11:25
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 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. ?

1 réponse

cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
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
0
Rejoignez-nous