IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Référence non-désirée a une classe


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 52
    Par défaut Référence non-désirée a une classe
    Bonjour
    Je sais pas trop comment formulé le problème mais allons-y.

    En gros, j'ai un petit logiciel dont l'objectif est de trouver la solution optimale a un jeu. J'ai donc une liste de Solutions, qui chacune on des Pions, qui peuvent Bouger() dans la Grille

    Je démarre donc la chose avec une Solution principale.

    Ensuite;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            For Each pion As Pion In Solution.Pions
                For Each poss As Possibilitee In Jeu.Possibilitees
                    If pion.PossibiliteeFaisable(Possibilitee, Solution.Grille) Then
                        Dim subSolution As New Solution(solution)
                        subSolution.Deplacement(subpion, poss)
                        If subSolution.Mouvement < Jeu.MouvementMax Then
                            Resoudre(subSolution)
                        Else
                            subSolution.Finaliser()
                        End If
                    End If
                Next
            Next
    Donc je génère une "SubSolution", soit un embranchement dans l'arbre des possibilitées, a partir du mouvement précédent (La fonction Resoudre(solution) appelée plus bas est celle dans laquelle nous sommes, et donc récursive). La SubSolution prend donc la liste des mouvements et la position actuelle des pions de la Solution "maitre" que nous tentons de résoudre en ce moment.

    Mon problème c'est qu'avec trace/espion, lorsque je tente d'effectuer un mouvement dans ma SubSolution(.Deplacer()), ma Solution "maître" est aussi affectée. Donc dès que je passe au mouvement suivant tout foire, et il fonce droit dans le mur en quelques millièmes de secondes.

    Ce que je ne comprend pas, c'est d'où il tire sa référence, ou pourquoi Solution est affecté par une modification dans SubSolution!?

    j'ai pensé au "byref", mais il s'agit bien d'un byval. et j'ai beau chercher, je ne comprend toujours pas pourquoi la seconde ou je modifie quelque chose sur la SubSolution, la Solution est aussi affectée????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Class Solution
     
    Public sub New(ByVAL solution as Solution)
           _pions = solution.Pions
           _moves = solutions.Moves
           .....
    End sub
    Merci
    Amuny,

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    c'est l'affectation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           _pions = solution.Pions
           _moves = solutions.Moves
    qui peut poser problème.

    En effet, tu copies une référence à tes objet Pions et Moves donc si tu modifies cet objet dans ton subSolution tu le modifies aussi dans Solution
    Tu devrais faire une méthode clone dans chacun de tes sous-objets genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           _pions = solution.Pions.Clone
           _moves = solutions.Moves.Clone
    Qui se chargerait de faire une vrais copie de l'objet...

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/11/2009, 00h20
  2. Réponses: 7
    Dernier message: 15/05/2009, 23h13
  3. Réponses: 1
    Dernier message: 26/09/2007, 17h16
  4. [D7]Méthode non accessible d'une classe à l'autre
    Par ero-sennin dans le forum Delphi
    Réponses: 2
    Dernier message: 20/03/2007, 17h44
  5. Réponses: 2
    Dernier message: 30/12/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo