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

MFC Discussion :

Récupérer une instance d'un objet


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut Récupérer une instance d'un objet
    Bonjour,

    Voilà mon problème: en utilisant la librairie OpenCV je dois utiliser une fonction on_mouse( ....) qui n'est pas dans une classe. Dans cette fonction j'aimerais utiliser des variables appartenant à la classe classeX.

    A priori l'astuce dont on m'a parlé est de créer une instance statique qu'on fait pointer sur l'unique instance créer (l'objet lui-même).

    Bref j' ai essayé en faisant:

    dans "classeX.h":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClasseX* instance;
    static classeX* getInstance();
    dans "classeX.cpp":
    * dans le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    instance = this // afin de pointer sur l'unique instance crée
    * déclaration de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ClasseX * ClasseX::getInstance()
    {
    	return instance;
    }
    * utilisation de ca dans ma fonction:
    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
    void on_mouse( int event, int x, int y, int flags, void* param)
    {
    	char str[10];
     
        		{
    		CEssai4View * t = ClasseX::getInstance();
    		t->mouseX = x;
    		t->mouseY = y;
    		sprintf( str,"%d", x );
    		CEdit * exp2 = static_cast<CEdit*>(GetDlgItem(IDC_EDIT6)); // on recupère l'edit correspondant
     
                    exp2->SetWindowText(str);
                    exp2->UpdateData();
    		sprintf( str,"%d", y );
    		exp2 = static_cast<CEdit*>(GetDlgItem(IDC_EDIT7)); 
    		exp2->SetWindowText(str);
    		exp2->UpdateData();
    		sprintf(str,"%d,%d",x,y)
     
    		}
     
    }
    }

    mais j'obtiens une erreur de compilation C2597 dans la fonction getInstance().



    BONUS: il y a également un probleme avec GetDlgItem(IDC_EDIT6) car il me dit C2660: la fonction ne prend pas 1 argument alors que dans une autre fonction je l'utilise de la même manière et ca marche.

    Merci si vous avez pris la peine de lire jusque là.

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    est ce que c'est dans la définition de la classe ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ClasseX* instance;
    static classeX* getInstance();
    je tiens à préciser que tu cherches a obtenir, si c'est le cas, une variable membre à partir d'une méthode de classe -> contradiction

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Oui c'est dans la définition de la classe.

    Mon but est de pouvoir accéder dans ma fonction on_mouse (extérieure à la classeX donc) à des membres de mon instance instanceCree de type ClasseX tel que (mouseX, ...)

    Est-ce clair ?

    Je n'ai pas beaucoup de connaissances en C++ et en info, j'ai donc du mal à m'exprimer avec le vocabulaire adéquat. J'espère m'être fait compris.

    Merci d'avance pour votre aide.

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    il faut que tumettes en place le pattern singleton voir ce post : http://www.developpez.net/forums/sho...875#post959875

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Merci,

    J'ai choisi d'utiliser la fonction AfxGetApp() dans ma fonction void on_mouse(...)
    en écrivant:

    CEssai4View *pApp= static_cast<CEssai4View*>(AfxGetApp());

    Sachant que CEssai4View est mon application principale.

    Le problème est que ne compile pas. J'ai une erreur C2440
    'static_cast' : impossible de convertir de 'CWinApp *' en 'CEssai4View *'


    Comment puis-je faire ?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ça ne compile pas parce que CEssai4View n'est certainement pas la classe d'application.
    la classe d'application est dérivée de CWinApp ,tu dois avoir un seul objet hérité de cette classe dans ton application ...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Merci mais quand j'essaye la méthode du singleton pattern comme je la décris plus haut dans mon cas, cela ne compile pas ...

    Dernièrement j'ai réussi à compiler mais après j'obtiens une erreur LNK2001. Donc je n'arrive pas à m'en sortir et ca commence à me

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 385
    Points : 20 462
    Points
    20 462
    Par défaut
    Citation Envoyé par MDiabolo
    Mon but est de pouvoir accéder dans ma fonction on_mouse (extérieure à la classeX donc) à des membres de mon instance instanceCree de type ClasseX tel que (mouseX, ...)
    Non il faut laisser tomber le on_mouse.
    MFC c'est une chose , la biblio dont tu parles c'est autre chose.
    Il vaut mieux gérer le CView::OnLButtonDown et là tu appelles les méthodes de OpenCV...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut alors??
    Bonjour a tous.
    J ai exactement le meme probleme et je voudrais bien savoir si tu as reussi a le resoudre.
    J'utilise wxwidget et opencv. J ai donc creer une classe COpencv qui quand je cree une instance me cree une fenetre tou bien. Le truc c'est que la fonction on_mouse appelé en callback par
    cvSetMouseCallback( "image", on_mouse, 0 );
    donc la fonction on_mouse ne peut pas etre membre de COpencv
    la fonction on mouse est
    void on_mouse( int event, int x, int y, int flags, void* param )
    {
    }
    donc pb de parametre..
    Quelqu un aurai la solution?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut re
    Alors voila j'ai resolu mon pb. J'ai fait derivé ma classe de wxGLCanvas ce qui m'a permi d'utiliser le tableEvent de celle ci. Je sais pas trop si c'est la meilleure facon de faire mais a defaut.... Opencv n'est pas tres pratique des que l'on prog de facon objet mais tellement efficace qu'elle merite bien un peu de sueur...

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2008, 16h37
  2. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  3. Comment récupérer une instance de Graphics::TGraphic ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2006, 15h01
  4. Réponses: 8
    Dernier message: 11/07/2006, 17h27
  5. [AS2] Récupérer une valeur d'un objet lorqu'on clique dessus
    Par softyClochette dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 13/10/2005, 18h40

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