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 :

Problème conversion de types


Sujet :

C++Builder

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut Problème conversion de types
    Bonjour,

    Je vous expose mon problème, j'ai 5 classes

    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
     
    class A 
    {
    B prop2();
    }
     
    typedef system::TMetaclass * B
     
    class C 
    {
    A * prop1[] ;
    }
     
    class D
    {
    UnicodeString __fastcall prop3() ;
    }
     
    class E : public D 
     
    package extern A var ;
    Je dois commencer par mon objet ( je vais dire global)
    et je voudrais avoir une relation comme suit :

    var --> prop1[i]-->prop2() --> prop3
    je dois récupéré le Résultat en UnicodeString qui est gérer par prop3

    J'ai fait comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        for(i=0 ; i< var->count ; i++)
    {
             A *pp1 ;
             B  *pp2 ;
             pp1 = var->prop1[i];
             pp2 = pp1->prop2();
             ShowMessage( pp2->prop3() );
    }
    mais j'ai des erreurs de conversion de types
    Quelqu'un aurais t'il une solution? je galère

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    TMetaclass c'est plutôt conçu pour des objets hérités de la branche Delphi à base TObject
    TMetaClass c'est un descriptif de classe mais pas une classe !
    Ce type me semble mal choisi

    le lien B et D pour l'accès à prop3 n'est pas clair !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class A : public TObject
    {..
    Sache qu'il existe le mot clé __property (aussi bien en C++Builder qu'en MSVC++)
    Cela facilite la syntaxe d'appel d'une propriété sous la forme d'une variable et non d'une fonction tout en "masquant" les éventuels accesseurs Get et Set

    Fourni nous plutôt le vrai code !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    Les classes sont codées en Delphi c'est une bibliothèque privée dont je ne peux pas toucher le code, mais je dois l'utiliser comme on utilise les composants VCL

    J'ai ajouté ce qui me parait essentiel :le fichier .hpp
    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
     
    class A : public System::Classes::TCollectionItem
    {
    private :
    B Fclass
    public :
     
    __property B prop2 = {read = Fclass, write= Fclass};
    }
     
    typedef system::TMetaclass * B;
     
    class C : public System::Classes::TCollection
    {
    public :
    __property A * prop1[int index] ;
    }
     
    class D : public System::TObject 
    {
    UnicodeString __fastcall prop3() ;
    }
     
    class E : public D 
    {
    typedef E inherited;
    }
     
    package extern A var ;
    pour la relation entre la classe B et D (fichier .pas )

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    le Fichier HPP est généré automatiquement si l'on ajoute le fichier PAS au projet C++, ne t'amuse surtout pas à l'écrire toi-même !

    Donc c'est du TCollection !
    Effectivement, il faut associer une MetaClass dans la propriété ItemClass d'une TCollection pour que la Factory utilisé par la méthode Add ou Insert envoie la bonne classe hérité de TCollectionItem
    Il faut savoir que ce code si simple en Delphi est pénible à écrire en C++ !

    Tu peux soit partir de l'objet Collection vers les Items :

    C->prop1[0]->prop2
    Problème prop2 est une référence de classe et non une classe, tu ne peux pas pas aller plus loin en C++Builder !

    Impossible d'aller jusqu'à D avec le code que tu as fourni !
    Prop2 doit permet de déterminer la classe contenu dans A, soit du D soit du E, est-il possible d'écrire ceci en C++ ?

    if (ObjetE->InheritsFrom(C->prop1[0]->prop2))
    En Delphi, il me semble (je suis rouillé) qu'il est possible de stocker dans une variable le type et d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MyObject := E.Create(); // MyObject: TObject;
    MetaClassB = E;
    ObjectE := MyObject as MetaClassB; // MyObject: E;
    if Assigned(ObjectE) then
    en C++, je doute que cela soit possible, ça donnerait

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TObject* ObjectE = new E();
    MetaClassB = E;
    E* ObjectE  = dynamic_cast<MetaClassB>(MyObject);
    if (ObjectE )



    Fourni LE VRAI CODE au lieu tes ABCD incompréhensible
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Points : 57
    Points
    57
    Par défaut
    J'ai fait un test en Delphi et ça marchait contrairement à c++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var i :integer ;
    pp1: A ;
    pp2 : B
     
    pp1 = var.prop1[i];
    pp2= pp1.prop2();
     
    ShowMessage(pp2.prop3());

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Avec tes déclarations et ce code Delphi, je pense que prop3 est une méthode de class !
    En C++, il faudrait déclarer prop3() en static ou en __classmethod

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      D = class(TObject)
      public
        class function prop3(): String;

    Effectivement, en Delphi, le type B est une référence de classe (TClass), il est possible d'avoir accès facilement depuis une référence de classe au méthode "statique" de la classe !

    En C++, le TMetaClass n'est pas aussi poussé que la référence de classe de Delphi

    Voici un exemple, de la puissance du TClass Delphi : Pattern Strategy et Constructeurs Virtuels VCL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [C# 2.0] Problème de conversion de type
    Par freerider1 dans le forum Windows Forms
    Réponses: 18
    Dernier message: 11/08/2017, 13h50
  2. Problème de conversion de types
    Par Rayndell dans le forum C++
    Réponses: 2
    Dernier message: 25/05/2007, 10h45
  3. [WD10] Problème de conversion de type
    Par rphenix dans le forum WinDev
    Réponses: 2
    Dernier message: 15/01/2007, 14h22
  4. [Excel] Problème de conversion de type de données
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2006, 12h26
  5. Problème conversion de type
    Par gengen dans le forum Access
    Réponses: 3
    Dernier message: 14/04/2006, 10h53

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