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 :

Pointeurs de classes et méthodes


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut Pointeurs de classes et méthodes
    Bonjour.

    J'ai un léger problème concernant les pointeurs de classes et leurs méthodes.
    Je voudrais que ma classe C_Case contiennent une pointeur sur la classe SDL_Event. Et pouvoir utiliser les méthodes de la classe SDL_Event à partir de ce pointeur. Comment faire ?

    Merci d'avance

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Salut,

    si tu souhaites utiliser simplement les méthodes publiques de SDL_event, il te suffit d'utiliser une instance de SDL_Event dans ta classe C_Case. Mais j'ai bien peur qu'en fait, tu n'en aies même pas besoin. Voir http://tastalian.free.fr/cours.php?part=SDL&index=5
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Non non, en fait, j'ai créer une classe que j'ai appeler SDL_Event, utilisant les évenements SDL mais de manière plus simple.

    Ainsi, je le déclare dans le main, et je voudrais la réutiliser dans toutes mes classes, sans en faire une copie, en utilisant la meme que celle déclarée dans le main.

    Comment-faire ?

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Faudrait nous donner plus d'info, là je ne vois pas ce que tu veux.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Bon, dans le main, je déclare la classe SDL_Event Event.

    Je pourrais utiliser cette classe en la déclarant simplement dans C_Case, mais malheuresement, la gestion des évenements avec SDL ne me le permet pas. Mais là n'est pas la question.

    Je voudrais donc, utiliser directement la classe SDL_Event déclarée dans le main. Donc j'avais penser aux pointeurs, pour toucher à la classe Event du main, mais je ne voie pas comment faire.

    Si vous ne comprenez toujours pas, je posterai quelquels morceaux de code.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je ne sais pas si j'ai bien compris ce que tu veux, mais tu peux passer un pointeur (ou une référence) sur ton instance de SDL_Event au constructeur de toute classe en ayant besoin.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Bon, voila du code :

    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
     class C_Case
    {
    private:
        SDL_Event *Events;
     
    public:
     
        // Constructeur.
        C_Case(SDL_Event &Event);
     
        // Destructeur.
        ~C_Case();
     
        //Clic sur une case
        int Clic();
    };
     
    #endif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C_Case::C_Case(SDL_Event &Event)
    {
        Events = &Event;
    }
    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
    int C_Case::Clic()
    {
        if (Events->GetButton(SDL_BUTTON_LEFT) == SDL_MOUSEBUTTONDOWN)
        {
            if (Events->GetMouseX() > affich_x+4
                    && Events->GetMouseX() < affich_x + 36
                    && Events->GetMouseY() > affich_y+4
                    && Events->GetMouseY() < affich_y + 20)
            {
                    return 3;
            }
                else
                    return 2;  // Souris sur le sprite mais pas de clic
        }
            else
                return 0;   // Souris non sur le sprite
        if (Events->GetButton(SDL_BUTTON_LEFT) == SDL_MOUSEBUTTONUP)
        {
            if (Events->GetMouseX() > affich_x+4
                    && Events->GetMouseX() < affich_x + 36
                    && Events->GetMouseY() > affich_y+4
                    && Events->GetMouseY() < affich_y + 20)
            {
                return 1;   // Clic sur le sprite
            }
            else
                return 0;   // Clic, mais pas sur le sprite
        }
    }
    Et voila les erreurs que me donne Code::Blocks :

    union "SDL_Event" has no member named 'GetButton'
    union "SDL_Event" has no member named 'GetMouseX"

    ect ect...

    Ou est donc mon erreur ?? Je précise que je suis sur que SDL_Event à des membres publics appelés GetButton et GetMouseX...

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En même temps, appeler une classe perso SDL_Event tout en utilisant la SDL, ce n'est pas très malin... Comment le compilo pourrait-il faire la différence avec la structure SDL_Event de la SDL ?

    Indice qui te permet de voir qu'il cherche dans la structure SDL_Event de la SDL (qui est une union) et non dans ta classe :

    union "SDL_Event" has no member named 'GetButton'

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 139
    Points : 55
    Points
    55
    Par défaut
    Ah, c'était une erreur bête... Car ma classe s'apelle SDL_Events...


    Bon, ben merci, problème réglé

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

Discussions similaires

  1. [Win32] Pointeur sur fonctions et méthodes de classe
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2007, 19h07
  2. polymorphisme, pointeurs et classes abstraites
    Par legend666 dans le forum C++
    Réponses: 10
    Dernier message: 02/11/2005, 16h44
  3. Déclaration de classes et méthodes externes
    Par rulianf dans le forum C++
    Réponses: 6
    Dernier message: 15/09/2005, 15h26
  4. Réponses: 3
    Dernier message: 24/04/2005, 14h19
  5. [C#] Pointeur de classe
    Par papouAlain dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/01/2005, 12h32

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