Forum Liberty Basic France

Le 15/05/2021 à 17h32

Libertynaute Actif

Groupe: Membre

Inscrit le: 17/12/2010
Messages: 124
Petit bug que je viens de découvrir.
Je poste ici, si sa peut aider quelqu'un :

----------------------------------------------------------------

Selon l'ordre de nos subs, l'exécution de notre programme peut provoquer le bug suivant :

"BASIC Compile Halted: array monTableau2D() is one dimensional"


Dans ce 1er exemple, tout fonctionne correctement :
Code VB :
nomainwin
    call maSub
end
 
sub maSub
    dim monTableau2D(100,100)
    for i = 1 to 100
        monTableau2D(i,i)=i
    next i
    call monTest
end sub
 
sub monTest
    notice monTableau2D(50,50)
end sub



Dans ce deuxième code, l'ordre des subs "monTest" et "maSub" sont inversés et provoque une erreur de compilation :
Code VB :
nomainwin
    call maSub
end
 
sub monTest
    notice monTableau2D(50,50)
end sub
 
sub maSub
    dim monTableau2D(100,100)
    for i = 1 to 100
        monTableau2D(i,i)=i
    next i
    call monTest
end sub




Edité par joan74 Le 16/05/2021 à 09h44
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"

   
Le 15/01/2022 à 23h25

Libertynaute Débutant

Groupe: Membre

Inscrit le: 15/01/2022
Messages: 2
'Une solution consiste à déclarer global

nomainwin
dim monTableau2D(100,100)
call maSub
end

sub monTest
notice monTableau2D(50,50)
end sub

sub maSub
for i = 1 to 100
monTableau2D(i,i)=i
next i
call monTest
end sub

   
Le 13/02/2023 à 20h03

Libertynaute Débutant

Groupe: Membre

Inscrit le: 15/01/2022
Messages: 2
Un an plus tard, j'ai enfin compris l'erreur.

Du compilateur, il suppose un tableau non déclaré de dimension dix.


Code VB :
 
nomainwin
    call maSub
end
 
sub monTest
    notice MYmonTableau2D(10)
end sub
 
sub maSub
    dim monTableau2D(100,100)
    for i = 1 to 100
        monTableau2D(i,i)=i
    next i
    call monTest
end sub
 
 
 


La solution est de "passer" le tableau par référence à la procédure.

Code VB :
 
 
nomainwin
    call maSub
end
 
sub monTest byref myArray
    notice myArray
end sub
 
sub maSub
    dim monTableau2D(100,100)
    for i = 1 to 100
        monTableau2D(i,i)=i
    next i
    call monTest monTableau2D(50,50)
end sub
 
 

   
Le 25/02/2023 à 08h41

Modérateur

Groupe: Modérateur

Inscrit le: 30/03/2011
Messages: 436
bravo pour la solution ^^
____________________
Yo !

MSN Web    

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie