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 :

Propriété (getter) d'une variable dynamique [WD19]


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut Propriété (getter) d'une variable dynamique
    Bonjour,

    J'ai un getter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
     
    RENVOYER :m_pclRefMaVariable
    Et je veux utiliser cette valeur, pour l'utiliser dans un constructeur de copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :m_pclRefMaVariable = allouer un CMACLASSE(:m_pclAutreVariable:p_pclRefMaVariable)
    Sauf que je me retrouve avec une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aucune syntaxe de 'Constructeur' ne correspond à l'appel.
    Or, j'ai bien un constructeur de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMACLASSE(:m_pclCOPIE est un CMACLASSE dynamique)
    Si vous avez des solutions pour ce probleme...car j'ai du repasser mon membre en public et je l'appelle directement pour que ca fonctionne. Mais je me demande si il y a une solution pour ma première méthode.

    Nhaps
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  2. #2
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour


    Je ne sais pas si la version 19 de WinDev le permet, peux tu créer un deuxième constructeur de la classe CMACLASSE sans paramètre.

    Bon dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  3. #3
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par dsr57 Voir le message
    Bonjour


    Je ne sais pas si la version 19 de WinDev le permet, peux tu créer un deuxième constructeur de la classe CMACLASSE sans paramètre.

    Bon dev
    Dans quel but créer un deuxième constructeur par défaut ?

    Merci.
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  4. #4
    Membre averti 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
    Points : 427
    Points
    427
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMACLASSE(:m_pclCOPIE est un CMACLASSE dynamique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_pclRefMaVariable = allouer un CMACLASSE(:m_pclAutreVariable:p_pclRefMaVariable)
    Est ce que p_pclRefMaVariable est de type CMACLASSE ?

  5. #5
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par tunizar Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMACLASSE(:m_pclCOPIE est un CMACLASSE dynamique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_pclRefMaVariable = allouer un CMACLASSE(:m_pclAutreVariable:p_pclRefMaVariable)
    Est ce que p_pclRefMaVariable est de type CMACLASSE ?
    Comme écrit dans le post originel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
     
    RENVOYER :m_pclRefMaVariable
    D'où le problème incompréhensible
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  6. #6
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    Octobre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 139
    Points : 4 681
    Points
    4 681
    Billets dans le blog
    22
    Par défaut
    Bonjour

    Dans quel but créer un deuxième constructeur par défaut ?
    Dans la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
    et plus précisément : CMACLASSE je suppose que WinDev appelle le constructeur de la classe à ce moment là et comme tu as seulement un constructeur avec paramètre, ce qui explique le message d'erreur.

    C'est pour cette raison que je proposais d'effectuer le test avec un deuxième constructeur sans paramètre.
    J'ai déjà eu un problème similaire avec les paramètres de procédures, d’où l'utilisation du mot clé dynamique.

    BOn dev
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  7. #7
    Membre averti 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
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Nhaps Voir le message
    Comme écrit dans le post originel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
     
    RENVOYER :m_pclRefMaVariable
    D'où le problème incompréhensible
    Bonjour,

    Ce code renvoi un objet de la classe CMACLASSE qui n'est pas dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
     
    RENVOYER :m_pclRefMaVariable
    cependant le constructeur attend un objet de la classe CMACLASSE qui est dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMACLASSE(:m_pclCOPIE est un CMACLASSE dynamique)
    Il me semble que j'ai vu ça auparavant

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Dans la déclaration du getter, le nom de la classe n'est là que pour typer la valeur de retour, il ne s'agit pas d'une instance.
    Le seul indice ici est le nom de la propriété renvoyée: :m_pclRefMaVariable
    Je parie donc que le membre est un objet dynamique, sinon le nom sera :m_clRefMaVariable.

    Tatayo.

  9. #9
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Dans la déclaration du getter, le nom de la classe n'est là que pour typer la valeur de retour, il ne s'agit pas d'une instance.
    Le seul indice ici est le nom de la propriété renvoyée: :m_pclRefMaVariable
    Je parie donc que le membre est un objet dynamique, sinon le nom sera :m_clRefMaVariable.

    Tatayo.
    Oui tout à fait.
    Donc je renvoie un objet dynamique.
    Mais quand cette valeur renvoyé est utilisée dans le constructeur de CMACLASSE (pour une copie)
    Cela ne fonctionne pas...
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  10. #10
    Membre averti 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
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Nhaps Voir le message
    Oui tout à fait.
    Donc je renvoie un objet dynamique.
    Mais quand cette valeur renvoyé est utilisée dans le constructeur de CMACLASSE (pour une copie)
    Cela ne fonctionne pas...
    Bien venu dans le monde merveilleux du copie d'objet WinDev !!
    un objet dynamique vers un objet instancié non dynamique ne marche pas correctement qu'en utilisant la compilation dynamique
    c'est ce que je fais toujours

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Tunizar: sauf qu'ici, d'après ce que je vois du code, nous n'avons que des objets dynamiques...
    Bref dans le code un instance d'un objet dynamique, renvoyé par une procédure (ici une propriété), est utilisé comme paramètre dans une autre procédure (le constructeur) qui attend en paramètre... un objet dynamique de la même classe.
    C'est d'ailleurs un peu le principe qui est utilisé pour faire un Décorateur ou un Adaptateur.
    Bref rien dans le code présenté n'explique le dysfonctionnement.

    Nhaps: Est-ce que tu as essayé de passer par une variable intermédiaire ?
    J'ai eut des cas où l'affectation depuis une propriété d'une instance vers une propriété d'une autre instance ne fonctionnait pas (alors que le deux traitaient des chaines), et WinDev m'indiquait qu'il ne pouvait pas convertir une chaine... en chaine.
    J'avais été obligé de passer par une fonction, du genre Remplace(MonInstance:MaPropriété,"",""). Ca ne fait rien, mais du coup mon code fonctionne. C'était avec la version 18, mais j'avoue que je n'y ai pas touché depuis (quand ça fonctionne, ne touche à rien !).

    Tatayo.

  12. #12
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Nhaps: Est-ce que tu as essayé de passer par une variable intermédiaire ?
    J'ai eut des cas où l'affectation depuis une propriété d'une instance vers une propriété d'une autre instance ne fonctionnait pas (alors que le deux traitaient des chaines), et WinDev m'indiquait qu'il ne pouvait pas convertir une chaine... en chaine.
    J'avais été obligé de passer par une fonction, du genre Remplace(MonInstance:MaPropriété,"",""). Ca ne fait rien, mais du coup mon code fonctionne. C'était avec la version 18, mais j'avoue que je n'y ai pas touché depuis (quand ça fonctionne, ne touche à rien !).
    Tatayo.
    Oui j'ai essayé de passer par une variable intermédiaire, mais cela n'a pas résolu le problème.

    LE bug est facile à reproduire chez vous, suffit de récupérer la variable dynamique via un getter, et d'utiliser ce getter en paramètre d'un constructeur de copie (voir même autre type de fonction)

    Ça m’embête un peu, car j'essaye de faire une belle encapsulation des données, mais des soucis comme ça, m'empêche de faire un vrai code propre, et au final on est facilement tenté de mettre tout en public...
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  13. #13
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Je suis en train de me dire que je suis un con sur le coup.
    Tout le monde a compris ou c'est juste moi?
    Quand tu dis:
    Citation Envoyé par Nhaps Voir le message
    J'ai un getter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE PUBLIQUE p_pclRefMaVariable() : CMACLASSE
     
    RENVOYER :m_pclRefMaVariable

    pclRefMaVariable est un CMACLASSE dynamique ... DANS CMACLASSE ?
    Ca n'as peut-être aucune utilité dans ce que tu veux faire, mais il y a le mot clé "objet" pour faire référence a l'objet/instance en cours.



    Citation Envoyé par Nhaps Voir le message
    Or, j'ai bien un constructeur de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMACLASSE(:m_pclCOPIE est un CMACLASSE dynamique)
    Pareil, c'est quoi cette syntaxe ?
    Pour quoi le ":" dans la liste des paramètres ??
    En 20 et 21 il n'accepte pas cette syntaxe.

  14. #14
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Le premier code se situe dans une autre classe.

    Et en effet dans le second code, j'ai mis les ":" en trop en voulant reproduire l'exemple, petite erreur de ma part.
    D'ailleurs c'est même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PROCEDURE Constructeur(pclCOPIEMAVARIABLE est un CMACLASSE dynamique)
    Mais non tu n'es pas fou
    C'est mon problème qui me rend fou :p
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Peut-être une piste...
    Est-ce que tu as essayé ainsi:
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMACLASSE(LOCAL m_pclCOPIE est un CMACLASSE dynamique)
    D'après l'aide en ligne, avec un paramètre local la propriété est "lue" au moment de l'appel, et non dans le code lors de la lecture du paramètre.

    Tatayo.

  16. #16
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Peut-être une piste...
    Est-ce que tu as essayé ainsi:
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMACLASSE(LOCAL m_pclCOPIE est un CMACLASSE dynamique)
    D'après l'aide en ligne, avec un paramètre local la propriété est "lue" au moment de l'appel, et non dans le code lors de la lecture du paramètre.

    Tatayo.
    Je viens d'essayer, mais cela ne fonctionne pas.
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  17. #17
    Membre actif
    Homme Profil pro
    Ingé Indus
    Inscrit en
    Juillet 2014
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingé Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 107
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par Nhaps Voir le message
    Mais non tu n'es pas fou
    Merci

    Bon, je viens d'essayer aussi. En effet, en utilisant directement la propriété comme tu le montre cela ne marche pas.

    Mais, j'ai trouvé deux alternatives, de contournement...

    1. Utilise un paramètre non typé dans le constructeur
      Pour éviter les surprises tu peut vérifier "manuellement" le type
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      PROCEDURE Constructeur(unobjet)
      MaDéfinition est une Définition =  RécupèreDéfinition(unobjet)
      SI MaDéfinition..Nom = "CMACLASSE" ALORS
      	m_pclCopie <- unobjet
      FIN
    2. Utilise un objet intermédiaire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      clCopieTemp est un CMACLASSE dynamique
      clCopieTemp = allouer un CMACLASSE
      clCopieTemp <- pclTest1.p_pclRefMaVariable
      MaVariable = allouer un CMACLASSE(clCopieTemp)
      Biensur il te faut un constructeur sans arguments

  18. #18
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par yoshi570 Voir le message
    ...
    Merci. En effet tes solutions fonctionnent et permettent de garder une encapsulation propre, bien que les détournements ne soient pas forcement très agréables mais bon il y a pire.

    Encore une fois, un détournement de trouvé dans l'utilisation de Windev...pas le premier, ni le dernier ^^
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/06/2007, 16h39
  2. Afficher une variable dynamique dans la barre des taches de windows
    Par mustang-ffw02 dans le forum Windows Forms
    Réponses: 16
    Dernier message: 27/05/2007, 23h24
  3. Réponses: 10
    Dernier message: 02/02/2007, 00h02
  4. Ajout d'une variable dynamique de type pointeur
    Par mmooaa dans le forum Langage
    Réponses: 3
    Dernier message: 02/01/2007, 23h04
  5. Enregistrement d'une variable dynamique dans un fichier
    Par zarbydigital dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 21h28

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