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++ Discussion :

chemin d'acces pour classe


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut chemin d'acces pour classe
    Bonjour,

    Je souhaiterais generaliser un code (que d'ailleurs j'ai mis recemment en open source). Pour cela, j'aurais besoin de fournir une sorte de "chemin d'acces pour classe", je m'explique :

    soit les definitions suivantes
    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
    {
     public : 
        int a1;
        int a2;
     
    //plein de code ;)
    };
     
    struct B
    {
     A boa;
     int babar;
    }
     
    struct C
    {
     B c1;
     B c2;
    }
    [RQ : c'est un exemple...]

    L'idee recherchee, c'est que le programmeur connait ses classes et il souhaite faire dans une fonctions generique (pas une methode de classe donc) dans laquelle on preciserait (en parametre par exemple) comment se rendre a l'information specifique de tel ou telle classe :

    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
     
    int Commentserendreaa1( TT oujesuis)
      {
       //je sais que je suis sur un B c1 de ma class C
       return oujesuis.boa.a1;
      }
     
    template <class TT, class VV> mafunct(TT tutu, VV vivi)
      {
       vivi(tutu);
      }
     
    //et dans un "main"
    C c01;
    mafunction(c01.c1, &Commentserendreaa1)
    [C'est un faux code qui doit pas compiler, c'est juste pour donner l'idee]

    Si vous trouver ma source, vous comprendrez que c'est pour se balader dans un tableau et rechercher une information specifique qui est cache derriere un chemin d'acces specifique mais constant.

    Si vous ne comprenez pas, merci de le dire, je m'explique souvent mal.
    Vu mon exemple, je pense que Commentserendreaa1 est une adresse de fonction a passer.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    Bon, j'ai trouve par moi meme cette appel de fonction... mais j'ai un soucis : compile sous devc++ et fonctionne mais pas reconnu sous builder.... qq1 a une idee?

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pour être franc, je n'ai pas vraiment compris ce que tu as voulu faire

    Donc montre la "solution" que tu as trouvé, et donc le code qui pose problème sous builder.

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    Coordonnee est une struct avec juste int x et int y avec constructeur qui va bien
    Vecteur est une classe template perso qui est simplement un TT* vect et un int l... (en gros comme un vector sdl en moins bien)

    ensuite, il y a le code pour la recherche en fichier joint...le meme que celui en open source avec en plus un 4eme parametre pour l'accesseur...une simple fonction.
    et un exemple d'accesseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int Access_coordx(Coordonnee *c)  
      {
       return c->x;
      }
    ...super complique!


    Voila vous avez ce qu'il me faut tester...

    (ATTENTION, je met aucun header dans le code ci apres...mais yen a et les bons!)
    Sous DevC++, je fais
    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
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
     
     Vecteur<Coordonnee> vect(7);
     vect.setcellule(1,Coordonnee(1,1));
     vect.setcellule(2,Coordonnee(3,2));
     vect.setcellule(3,Coordonnee(5,7));
     vect.setcellule(4,Coordonnee(7,150));
     vect.setcellule(5,Coordonnee(9,9));
     vect.setcellule(6,Coordonnee(11,1));
     vect.setcellule(7,Coordonnee(13,0));
     
     Coordonnee *ite=&(vect[3]);
     cout<<ite<<"->"<<(*ite).x<<endl;
     system("PAUSE");
     
     ite++;
     cout<<ite<<"->"<<(*ite).x<<endl;
     system("PAUSE");
     
     ite+=2;
     cout<<ite<<"->"<<(*ite).x<<endl;
     system("PAUSE");
     
     cout<<endl<<Search_logic_tab2(11,&*vect.vect,6,Access_coordx)<<endl;
    //oui ca c'est ch**** le &* mais bon
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Maintenant la meme chose sous builder mais fait lorsqu'on click sur un label ou s'affichera les donnes (oui je trouve jamais le mode console dans builder)
    tampon est define comme 70000 pour avoir le temps de voir... oui pas astucieux, je sais
    [CODE]void __fastcall TForm1::Label1Click(TObject *Sender)
    {
    Vecteur<Coordonnee> vect(7);
    vect.setcellule(1,Coordonnee(1,1));
    vect.setcellule(2,Coordonnee(3,2));
    vect.setcellule(3,Coordonnee(5,7));
    vect.setcellule(4,Coordonnee(7,150));
    vect.setcellule(5,Coordonnee(9,9));
    vect.setcellule(6,Coordonnee(11,1));
    vect.setcellule(7,Coordonnee(13,0));

    Coordonnee *ite=&(vect[3]);
    Label1->Caption=(*ite).x;
    for(int i=0;i<tampon;++i){;}

    ite++;
    Label1->Caption=(*ite).x;
    for(int i=0;i<tampon;++i){;}

    ite+=2;
    Label1->Caption=(*ite).x;
    for(int i=0;i<tampon;++i){;}

    Label1->Caption=Search_logic_tab2(7,vect.vect,6,Access_coordx);
    //ici, il semble bien vouloir sans &* !
    }

    et j'ai le droita un jolie...
    [C++ Erreur] Unit1.cpp(45): E2285 Impossible de trouver une correspondance pour 'Search_logic_tab2<TT2,TT3>(int,Coordonnee *,int,int (*)(Coordonnee *))'

    Pourtant, c'est bien dans ses includes et tout! (je vous laisse deviner lesquelles si vous savez compter jusqu'a 3 )

    Merci si qq1 voit qq chose.


    Sinon, si vous savez comment configurer le deboggeur de devc++, je prends aussi!
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2009, 17h42
  2. Couper un chemin d'accès pour n'avoir que le nom du fichier
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/11/2009, 22h18
  3. Réponses: 4
    Dernier message: 13/05/2009, 17h07
  4. [VB.NET] reduction chemin d'accès pour affichage ?
    Par lacsap49 dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/10/2006, 23h02
  5. Réponses: 2
    Dernier message: 10/09/2006, 13h28

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