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

WinDev Discussion :

Affectation par référence d'une variable de type structure [WD21]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut Affectation par référence d'une variable de type structure
    Bonjour,

    je cherche à affecter une variable par référence, cette variable est de type structure.

    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
    ST_MaStructure est une Structure
    	Code est une chaîne
    	Texte est une chaîne
    	Tab2 est un tableau de ST_UneAutreStructure
    FIN
     
    tab est un tableau de ST_MaStructure 
     
    monObjet est un ST_MaStructure dynamique = allouer un ST_MaStructure 
     
    TableauAjouteLigne(tab)
    //monObjet = allouer un ST_MaStructure 
    //test est un ST_MaStructure = allouer un ST_MaStructure 
     
    monObjet <- tab[TableauOccurrence(tab)] // Déclenche une exception
     
    monObjet.Code = "toto"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Que s'est-il passé ?
    Impossible d'affecter l'élément.
     
    Code erreur : 1149
    Niveau : erreur fatale

    J'ai déjà fait fonctionner l'affectation avec des tableaux de structure, des objets de classe, mais là je n'arrive pas à le faire fonctionner avec des variables de type structure.

    edit : objet remplacé par monObjet

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Je ne comprends pas très bien la logique de ce code.
    Tu commences par allouer une structure dans la variable "objet"*
    Ensuite tu redimensionnes ton tableau
    Enfin tu écrases ta variable objet avec le premier élément du tableau.

    A quoi sert l'allocation ?

    Sinon Est-ce que tu as essayé avec un tableau de structure dynamique, vu que "objet" est une structure dynamique ?

    Tatayo.

    *: il me semble que objet est un mot réservé...

  3. #3
    Membre Expert
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 393
    Par défaut
    Bonjour

    "objet" est bien un mot réservé, il désigne la classe en cours

    http://doc.pcsoft.fr/fr-FR/?1511008

  4. #4
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Citation Envoyé par ToxiK Voir le message
    Bonjour,

    je cherche à affecter une variable par référence, cette variable est de type structure.

    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
    ST_MaStructure est une Structure
    	Code est une chaîne
    	Texte est une chaîne
    	Tab2 est un tableau de ST_UneAutreStructure
    FIN
     
    tab est un tableau de ST_MaStructure 
     
    objet est un ST_MaStructure dynamique = allouer un ST_MaStructure 
     
    TableauAjouteLigne(tab)
    //objet = allouer un ST_MaStructure 
    //test est un ST_MaStructure = allouer un ST_MaStructure 
     
    objet <- tab[TableauOccurrence(tab)] // Déclenche une exception
     
    objet.Code = "toto"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Que s'est-il passé ?
    Impossible d'affecter l'élément.
     
    Code erreur : 1149
    Niveau : erreur fatale

    J'ai déjà fait fonctionner l'affectation avec des tableaux de structure, des objets de classe, mais là je n'arrive pas à le faire fonctionner avec des variables de type structure.
    Bonjour,
    J'ai eu le même problème
    J'ai essayé de faire une prise de référence sur une structure avec (<-) mais ça plante, quant à l'utilisation de (<=) ne plante pas mais ne fais pas la prise de référence.
    Erreur : Impossible d'affecter l'élément.
    Le code explicatif
    Pièce jointe 209464


    Voici la réponse du support technique

    Effectivement l'opérateur n'est pas adaptée à des variables structurées :
    http://doc.pcsoft.fr/fr-FR/?1515003

    Une suggestion en ce sens a été transmise à notre équipe Développement. J'espère que les implémentations nécessaires pourront être planifiées rapidement.

    Dans l'immédiat il faut utiliser l'opérateur pour vos instances de classes, ou les rendez-vous/tâches des plannings et diagrammes de Gantt.


    Donc ce n'est pas possible ni dans la 20 ni dans la 21, il faut faire autrement, peut être variable composé ?

    P.S : il y a une erreur dans ton code objet est un mot réservé.

    Cordialement

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Vous pouvez aussi utiliser des classes au lieu de structure, la prise de référence est sensée fonctionner dans ce cas.

    Tatayo.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Par défaut
    Bonjour

    Il s'agit de nouveau d'un problème de vocabulaire et d'un manque de rigueur dans l'utilisation de la nomenclature ... dans le chef de PCsoft, qui finit par nous induire en erreur.
    En conséquence de quoi, j'ai aussi été piégé à mes débuts par cette notion de variable de type avancé.
    La page de documentation consacrée à la Structure (Type de variable) est un exemple du genre.
    De mémoire, c'est là que j'ai découvert - à mes dépens - la notion de type avancé dans Windev ... !

    Au fur et à mesure qu'on découvre un langage, on commence a priori par travailler avec des variables banales, simples, puis plus avancées avant de passer aux variables vraiment plus spécifiques ou nouvelles que PCsoft introduit au fur et à mesure des versions.
    Donc, dans le cadre de la découverte des structures et des variables composées, on tombe notamment sur la page de doc consacrée à la Structure (Type de variable).

    Dans les remarques, on trouve un paragraphe traitant des types "avancés" :
    Quels types "avancés" peuvent être membre ?
    Une variable "avancée" peut être membre d'une variable "avancée". Le tableau ci-dessous présente les différentes combinaisons :
    On en déduit - peut-être un peu rapidement, mais il n'est pas toujours aisé de décrypter la doc - que les variables traitées dans ce tableau (soit les variables composées, structures, objets et tableaux) sont considérées comme des types avancés.
    A la relecture et à la lumière de problèmes du genre de celui qui nous préoccupe, on remarque qu'il est écrit "avancés" entre guillemets.
    On se dit donc qu'il y aurait peut-être une restriction sémantique dans cette formulation.

    Mais alors, que conclure du paragraphe suivant consacré au passage d'une structure en paramètre :
    Passer une structure en paramètre à une procédure
    Une variable de type "structure" peut être passée en paramètre à une procédure. Pour cela, utilisez la syntaxe suivante :
    "Structure" est aussi utilisé entre guillemets alors qu'il s'agit vraiment des structures dans ce cas.

    Pour enfoncer le clou, il faut relever plus haut sur la page, le paragraphe consacré au type admissible pour les membres d'une structure.
    On y utilise à trois reprises le terme avancé sans guillemets ce coup-ci.
    Type des membres d'une structure
    Les membres d'une structure peuvent être de type :

    Entier (ou sélectionné parmi les entiers avancés).
    Réel (ou sélectionné parmi les réels avancés).
    Monétaire.
    Chaîne (ou sélectionné parmi les chaînes avancées)....
    Ceci en parfaite contravention avec la définition officielle des Type avancés, sur laquelle on finit par tomber.

    Sans doute faut-il considérer ces pratiques comme une sorte de prime à l'ancienneté.

  7. #7
    Membre très actif Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Par défaut
    Bonjour,
    Merci pour ces explication , mais peut être je suis un peu bête , je ne vois pas la résolution du problème ?!

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 228
    Par défaut
    hello,
    l'excellent Tatayo a dit :
    Vous pouvez aussi utiliser des classes au lieu de structure, la prise de référence est sensée fonctionner dans ce cas.
    En effet une classe ressemble à une structure si on ne prend que ses membres.
    Si l'on crée une classe St_MaStructure avec comme déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ST_UneAutreStructure est une structure
    Code est un entier 
    Nom est une chaîne	
    FIN
     
    St_MaStructure est une classe
    	Code est une chaîne
    	Texte est une chaîne
    	Tab2 est un tableau de ST_UneAutreStructure
    FIN
    avec ce code, il semblerait que l'affectation par référence fonctionne alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MonTableau est un tableau de St_MaStructure 
    MonObjet est un St_MaStructure
    TableauAjouteLigne(MonTableau)
     
    MonObjet <- MonTableau[TableauOccurrence(MonTableau)] 
    MonObjet.Code = "toto"
    Trace (MonTableau[TableauOccurrence(MonTableau)].Code)
    Ami calmant, J.P

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

Discussions similaires

  1. Initialisation d'une variable de type Structure
    Par callofduty dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/02/2014, 10h04
  2. Réponses: 2
    Dernier message: 31/10/2007, 15h40
  3. Réponses: 11
    Dernier message: 19/07/2007, 10h56
  4. Réponses: 6
    Dernier message: 29/04/2006, 20h37
  5. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14

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