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

C++Builder Discussion :

Erreur de propriété sur une forme


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut Erreur de propriété sur une forme
    bonjour

    J'ai cette erreur là
    [C++ Erreur] Unit2.cpp(1665): E2288 Pointeur sur structure nécessaire du côté gauche de -> ou ->*.

    L'erreur pointe ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TModifconduite::Timer1Timer(TObject *Sender)
    {
    if (Modifconduite->Visible== true)  
    {....}
    else
    {....}
     }
    Modifconduite est déclaré en tant que forme :TModifconduite Modifconduite
    Je n'arrive pas à comprendre cette erreur.
    Une personne charitable pourrait-il m'éclairer sur ce problème?

    merci
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  2. #2
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Modifconduite n'est pas correctement déclaré. Il aurait probablement fallu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TModifConduite *ModifConduite;
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  3. #3
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    si ModifConduite est déclaré ainsi TModifconduite Modifconduite, ce n'est pas un pointeur ; on accède donc à ses propriétés et méthodes par :

    Note : je ne connais pas l'objectif du code, mais je suppose que le test sur la propriété Visible devrait se faire sur la propriété de la classe et non sur celle d'une instance particulière (ModifConduite).

    Le test devrait donc être Nicolas

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    On est bien par rapport à une instance particulière puisque l'on a :

    Donc... depuis une méthode membre de TModifconduite (le this est invisible):

    A plus !

  5. #5
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par henderson
    Salut !

    On est bien par rapport à une instance particulière puisque l'on a :

    Donc... depuis une méthode membre de TModifconduite (le this est invisible):

    A plus !
    Pour préciser ma pensée : si on utilise ou bien , on fait le test sur la propriété de l'instance pour laquelle la méthode a été appelée. Alors que si on teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (Modifconduite.Visible)
    on teste la propriété Visible de l'objet particulier ModifConduite quelque soit l'instance pour laquelle on a appelé la méthode. C'est dans ce sens que je faisais la distinction "instance particulière"...

    Nicolas

  6. #6
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Bonjour

    Excusez moi j'ai fait une erreur de frappe. la déclaration est TModifconduite *Modifconduite.


    De plus j'ai essayé ceci dans une fiche différente de la fiche Modifconduite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (Modifconduite->Visible == false)
    { Modifconduite->Timer1->Enabled = false;}
    Lors de la compilation, il n'y a aucune erreur sur ce bout de code.
    Donc la je ne comprend vraiment pas. Pourquoi si je met dans la fiche Modifconduite le code "if (Modifconduite->Visible == false)" j'ai une erreur de compilation. Alors qu'avec le même code dans une fiche différente du projet, je n'ai pas d'erreur.

    Est ce que c'est un bug du BCB v4?
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Si cela avait été un bug de BCB4 on aurait pas pu aller plus loin !

    Depuis une méthode membre on accède directement aux propriétés de l'objet (objet en tant qu'instance).
    C'est une illusion bien sûr à cause du this mais comme ce dernier est invisible, on peut se laisser bercer par cette impression à cause de la rédaction courte qui en découle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::...
    {
    Visible = true; // accès direct à Visible de Form1
    }
    Reste à savoir si dans cette unité supplémentaire, ton code appartient à une méthode membre de la dite classe ou pas.

    Si ce n'est pas le cas, alors ce code est normal puisque les propriétés sont celles d'un objet pointé par un pointeur, ce qui entraine un accès indirect donc une rédaction longue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::...
    {
    Form2->Visible = true; // accès indirect à Visible de Form2
    }
    A plus !

  8. #8
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    Ok j'ai compris. Merci

    Pour information, ceci marche.

    Depuis une méthode membre on accède directement aux propriétés de l'objet (objet en tant qu'instance).
    C'est une illusion bien sûr à cause du this mais comme ce dernier est invisible, on peut se laisser bercer par cette impression à cause de la rédaction courte qui en découle.

    Code :

    void __fastcall TForm1::... { Visible = true; // accès direct à Visible de Form1 }
    "Nulla Tenaci Invia Est Via"
    Aux persévérants aucune route n'est interdite

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

Discussions similaires

  1. Erreur de segmentation sur une chaine en récursif...
    Par laurent_ifips dans le forum C
    Réponses: 12
    Dernier message: 13/12/2005, 16h04
  2. Afficher un bouton appartenant à une classe sur une form
    Par Julien_riquelme dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/09/2005, 13h10
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. Comment spécifier des raccourcis claviers sur une Form ?
    Par Sydaze dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/06/2005, 09h05
  5. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59

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