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 :

[MFC] Problème pointeur sur une classe


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut [MFC] Problème pointeur sur une classe
    Bonjour à tous,

    Je cherche à passer un pointeur sur une boîte de dialogue (créé avec AppWizard, la classe gérant la boîte dérive donc de Cdialog) à une autre classe de mon application. J'ai donc déclaré un pointeur sur ma classe "Boite de dialogue" et je l'initialise avec le pointeur this à l'initialisation de la boîte. Ensuite je passe ce pointeur comme paramètre au constructeur de mon autre classe.

    Problème, la déclaration de ce pointeur sur une boîte de dialogue est incorrecte dans la classe où je veux le récupérer, j'ai un message
    error C2501: 'CProjetDlg' : missing decl-specifiers
    Pourtant je mets bien le header....

    Si quelqu'un a une idée....merci d'avance de votre aide (plus de détails sur demande).

  2. #2
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 102
    Points : 111
    Points
    111
    Par défaut
    Peux-tu nous montrer le code SVP

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Voilà mon code:
    ça c'est la classe gérant la boîte créée par AppWizard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class CProjetDlg : public CDialog
    {
    // Construction
    public:
    	CProjetDlg(CWnd* pParent = NULL);	// standard 
    	COpenGLWnd *m_pDisplay;    //pointeur sur la fenêtre OpenGL
    Ensuite à l'initialisation de la boîte je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_pDisplay = new COpenGLWnd(this);
    Car ma classe COpenGLWnd est définie comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "ProjetDlg.h"
     
    class COpenGLWnd : public COGL
     
    {					
    // Construction
    public:
    	COpenGLWnd(CProjetDlg *pDialog);
    ...
    Ensuite je passe ce pointeur pDialog à la classe COGL car c'est là que j'en ai besoin, pour cela je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COpenGLWnd::COpenGLWnd(CProjetDlg *pDialog):COGL(pDialog)
    pour passer pDialog au constructeur de COGL, ensuite dans COGL j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    COGL::COGL(CProjetDlg *pDlg)
    {
    	 m_pDialog = pDlg;
    }
     
    COGL::~COGL()
    {
     
    }
    Sachant que m_pDialog a été déclaré comme un pointeur vers CProjetDlg dans le header.

    Bon c'est compliqué et pas très clair je sais , mais si quelqu'un a une solution ou une idée à ce problème, surtout n'hésitez pas.....

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Autre précision: COpenGLWnd est une fenêtre (hérite de CWnd) fille de la boîte de dialogue et COGL est une simple classe contenant les routines d'initialisation OpenGL de ma fenêtre OpenGL. Mon objectif est de récupérer un pointeur sur la boîte dans COGL de façon à connaitre l'état de checkbox, boutons....etc

  5. #5
    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 doit etre simplement un probleme d'inclusion du header de ta classe CProjetDlg dans le source ou se trouve COpenGLWnd
    attention aux regles des headers voir denier post dans le post it de la faq.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    C'est ce que je pensais mais je m'en sors pas. J'ai vu le post, mais normalement c'est bon car tous mes .h sont créés avec visual donc ils incluent la structure de contrôle.

    C'est quand j'inclus le header de ma boîte de dialogue dans les autres header que l'erreur survient, pas si je le mets dans un .cpp.

    Pourtant faut bien que je le fasse pour pouvoir déclarer le pointeur vers cette classe....

    Merci quand même de ton aide, je vais essayer de voir si je peux contourner le pb.

  7. #7
    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
    essaie aussi de faire un clean et rebuild all .
    mais je pense que ça doit etre du a ton organisation des .h
    moi pour les dialogues je ne mets pas le .h de la classe dans un autre header uniquement dans le .cpp pour eviter le pb avec les ressources par exemple.

    en dernier recours.
    tu peux aussi essayer la declaration de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class CProjetDlg;
    class COpenGLWnd : public COGL             
    {
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Bon j'ai mis en oeuvre le dernier recours et ça marche.....cool ça commençait à

    Par contre petite question comment tu fais pour ne pas mettre de .h dans un header. Par exemple si je veux faire de l'héritage il faut bien que la classe héritée soit connue au moment de mes déclarations? non?

    En tout cas merci pour ton aide, ce que j'ai fais est peut-etre pas tres propre mais bon au moins ça marche

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

Discussions similaires

  1. Récupérer un pointeur sur une classe Singleton
    Par slake13 dans le forum Débuter
    Réponses: 7
    Dernier message: 18/11/2008, 17h01
  2. pointeur sur une classe utilisateur
    Par maa dans le forum C#
    Réponses: 15
    Dernier message: 06/07/2007, 16h25
  3. Réponses: 8
    Dernier message: 30/05/2006, 01h26
  4. [C++] pointeur sur une classe
    Par PH69 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/11/2005, 22h08
  5. Réponses: 14
    Dernier message: 14/03/2005, 09h16

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