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 :

Erreur à la compilation "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut Erreur à la compilation "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type"
    Bonjour,

    Lors de la compilation de mon projet, j'ai une erreur "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type 'system.compiler.struct'", et là je ne vois pas trop pourquoi.

    Mon code est le suivant:
    J'ai une classe de variables qui me défini une espèce de forme élémentaire de dessin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Public Class ClassDessinLadder
     
        ' Type de donnée pour le dessin des équations
     
        Dim _TypeContact As Integer      ' code du type de contact 1:NO/2:NF/0:Rien
        Dim _BG As Integer               ' code du dessin à gauche du contact 
        Dim _HG As Boolean               ' code du dessin à gauche de la variable True:Trait vertical/False:Rien
        Dim _Variable As String          ' Adresse de la variable si elle existe
     
        '' Constructeurs
        Friend Sub New(ByVal TypeC As Integer, BasGauche As Integer, HautGauche As Integer, Var As String)
            _TypeContact = TypeC
            _BG = BasGauche
            _HG = HautGauche
            _Variable = Var
        End Sub
     
        '' Accesseurs
        Property TypeContact() As Integer
            Get
                Return _TypeContact
            End Get
            Set(ByVal Valeur As Integer)
                _TypeContact = Valeur
            End Set
        End Property
        Property BasGauche() As Integer
            Get
                Return _BG
            End Get
            Set(ByVal Valeur As Integer)
                _BG = Valeur
            End Set
        End Property
        Property HautGauche() As Integer
            Get
                Return _HG
            End Get
            Set(ByVal Valeur As Integer)
                _HG = Valeur
            End Set
        End Property
        Property Variable() As String
            Get
                Return _Variable
            End Get
            Set(ByVal Valeur As String)
                _Variable = Valeur
            End Set
        End Property
     
    End Class
    Cette classe est appelée dans une autre classe beaucoup plus importante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Public Class ClassEquaSeq
     
        ' Cette classe definit l'ensemble des données associées à la définition des séquences du séquentiel
        Protected Structure AdresseMatrice
            Dim AdrV As Integer
            Dim AdrH As Integer
        End Structure
     
        Protected _Equa As New List(Of String)
        Protected _Num As Integer
        Protected _Decode As Boolean
        Protected _DessinEqua As New List(Of Dictionary(Of AdresseMatrice, ClassDessinLadder))
     
        '' Constructeurs
        Friend Sub New(ByVal Numero As Integer, ByVal Equation As String)
            _Num = Numero
            _Equa.Add(Equation)
            _Decode = False
            _DessinEqua.Add(Nothing)
        End Sub
        Friend Sub New()
            _Num = Nothing
        End Sub
     
        '' Accesseurs
        Property Numero() As Integer
            Get
                Return _Num
            End Get
            Set(ByVal Valeur As Integer)
                _Num = Valeur
            End Set
        End Property
        Property Equation(ByVal Index As Integer) As String
            Get
                Return _Equa(Index)
            End Get
            Set(ByVal Valeur As String)
                _Equa(Index) = Valeur
            End Set
        End Property
        Property Decode() As Boolean
            Get
                Return _Decode
            End Get
            Set(ByVal Valeur As Boolean)
                _Decode = Valeur
            End Set
        End Property
        ReadOnly Property DessinEqua(ByVal Index As Integer, V As Integer, H As Integer) As ClassDessinLadder
            Get
                Dim Adresse As New AdresseMatrice
                Adresse.AdrV = V
                Adresse.AdrH = H
                Return _DessinEqua(Index).Item(Adresse)
            End Get
        End Property
     
        '' Méthodes
        Friend Sub AddEqua(ByVal Equation As String)
            _Equa.Add(Equation)
            _DessinEqua.Add(Nothing)
        End Sub
        Friend Function CountEqua() As Integer
            Return _Equa.Count
        End Function
        Friend Sub AddLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer)
            Dim Adresse As New AdresseMatrice
            Adresse.AdrV = V
            Adresse.AdrH = H
            Dim Contact As New ClassDessinLadder(Nothing, BasGauche, Nothing, Nothing)
            _DessinEqua(Index).Add(Adresse, Contact)
        End Sub
        Friend Sub AddLadderContact(ByVal Index As Integer, V As Integer, H As Integer, TypeContact As Integer, NomVariable As String)
            Dim Adresse As New AdresseMatrice
            Adresse.AdrV = V
            Adresse.AdrH = H
            Dim Contact As New ClassDessinLadder(TypeContact, Nothing, Nothing, NomVariable)
            _DessinEqua(Index).Add(Adresse, Contact)
        End Sub
        Friend Sub MaJLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer, HautGauche As Boolean)
            Dim Adresse As New AdresseMatrice
            Adresse.AdrV = V
            Adresse.AdrH = H
            _DessinEqua(Index).Item(Adresse).HautGauche = HautGauche
            _DessinEqua(Index).Item(Adresse).BasGauche = BasGauche
        End Sub
    Bon cela a peut-être l'air un peu tordu, mais pourtant dans ma tête c'est "presque" super clair:
    • je récupère dans un fichier texte plein de lignes qui sont des équations booléennes (des truc d'automaticiens avec des ET et des OU)
    • La structure de ce que je récupère fait que pour une équation donnée, je peux avoir 1 numéro et une équation ou 1 numéro et une série d'équations (ça, ça explique le "_Equa As New List(Of String)")
    • Ensuite j'ai tout un tas de code qui marche pas trop mal et qui me fait afficher ces équations dans un datagridview, les équations sont affichées sous forme de "texte" avec plein de trucs qui se passent quand on clique sur une partie du texte
    • Bon jusqu'à ce moment de mon projet, tout allait bien et je compilais l'ensemble du code sans erreur
    • Maintenant mon objectif c'est de dessiner cette équation. Du coup une équation du genre "S87.[B24+B26][R24.E144+R24.E128+R61.E145+R61.E129]=R81." doit être représentée comme ça :
      Nom : Capture ladder.PNG
Affichages : 384
Taille : 3,8 Ko
    • Dans mon code je vais lire l'équation textuelle et la transformer en dessin (j'ai déjà le code qui marche sous excel d'où l'image). Je cherche à avoir un objet qui est le stockage de cette forme de dessin
    • Au début je suis parti sur l'idée de créer une liste de tableau de 2 dimensions de taille maxi possible (les équations ont des tailles différentes qui peuvent donner des dessins plus ou moins longs et plus ou moins hauts). Bon après réflexion, je me suis dit que le coup de la liste de tableaux 2 dimensions de taille maxi (liste pour avoir un dessin par _Equa) ça ne faisait pas très langage objet
    • Je décide donc de faire une classe qui contient un "carré de mon dessin" (le contact, son nom, ce qu'il faut dessiner à sa gauche immédiate): ça c'est ma ClassDessinLadder
    • Ensuite pour l'utiliser facilement dans mon datagridview (et par analogie avec un tableau 2 dimensions), je le stocke dans une liste de dictionnaires où la clef est l'adresse Verticale/Horizontale du dessin, donc pour la clef je crée une structure AdresseMatrice, comme ça je peux faire toutes les opérations liées aux dictionnaires dessus.
    • D'où le code dans ClassEquaSeq. Pour l'instant toutes les méthodes ne sont pas encore là mais les principales le sont.


    Et là j'avoue je suis complètement sec sur le message d'erreur que j'obtient à la compilation. Je ne vois pas ce qu'il essaye de "caster".

    Si quelqu'un peut me donner un petit coup de main, je suis preneur.

    Merci d'avance.

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Je en crois pas pouvoir répondre à ton problème mais je veux épingler ici 1 détail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        ReadOnly Property DessinEqua(ByVal Index As Integer, V As Integer, H As Integer) As ClassDessinLadder
            Get
                Dim Adresse As New AdresseMatrice
                Adresse.AdrV = V
                Adresse.AdrH = H
                Return _DessinEqua(Index).Item(Adresse)
            End Get
    La structure AdresseMatrice n'est pas une classe et n'implémente pas de méthode New.
    Perso, vu qu'on est au sein d'une même classe (Structure et Property), j'écrirais simplement Dim Adresse As AdresseMatrice.

    Par ailleurs, ton message ne dit pas quelle ligne de code génère l'erreur (si j'ai bien tout lu). Si tu veux être aidé, ce serait bien de l'indiquer ...


  3. #3
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Bonjour Phil Rob,

    Tout d'abord, merci pour ta réponse.

    Je n'ai pas donné de ligne parce qu'il n'y en a pas, le message d'erreur c'était juste "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type 'system.compiler.struct'", alors je suis d'accord avec toi, j'en veut beaucoup à Visual Studio de ne pas me dire d'où ça vient...

    Je parle au passé, parce que quand même j'ai un peu de fierté, et même si je pose une question sur le forum (après avoir pas mal pesté de mon côté), je continue quand même à chercher.

    J'ai donc passé en commentaire toutes les lignes qui étaient relatives à mon nouveau code, et là, va savoir pourquoi j'avais toujours le même code erreur?!...

    Après une recherche dans tout le projet, aucune référence oubliée dans un coin (quand j'ai commencé à déclarer mes nouveaux objets, j'ai eu des petites difficultés liées à mes limites en .net, j'avais donc écrit du code de déclaration dans différents modules...).

    Alors comme j'étais sec, je me suis décidé à redescendre une sauvegarde de mon projet avant le début de ces modifs.

    J'ai recompilé (pas d'erreurs) et j'ai recopié mon code petit à petit avec recompilation à chaque fois (et toujours pas d'erreurs).

    En définitif le même code et pas d'erreurs, à n'y rien comprendre.

    En tout cas merci pour ton conseil pour les New, je les ai enlevé, et j'en ai profité pour corriger quelques erreurs sur des problèmes de types Boolean/Integer danns mon code.

    Je clos la discussion (et je me demande si je ne devrais pas envoyer un mail de réclamation a Crosoft pour leur demander des messages d'erreur plus explicites ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 18/03/2014, 10h42
  2. Réponses: 4
    Dernier message: 10/05/2011, 11h55
  3. Réponses: 7
    Dernier message: 26/04/2011, 18h00
  4. Réponses: 0
    Dernier message: 13/03/2010, 10h25
  5. Réponses: 2
    Dernier message: 06/03/2007, 19h38

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