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 :

Passer un pointeur sur une classe a un autre fiche


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Passer un pointeur sur une classe a un autre fiche
    Voici mon problème :

    J'ai un projet qui a 2 fiches. 1 est le programme principale et le second la fiche des préférences. En plus j'ai creer ma propre classe de préférences qui s'appele cPreferences.

    ce que je veux faire c'est de passer le pointeur sur la classe préférences a la fiche des preferences pour pouvoir ecrire les preferences dans la classe et pouvoir utiliser cette meme classe dans la fiche principale. ( si possible ) J'ai essayer la chose suivant mais ca me donne une erreur EACCESSVIOLATION avec un adresse memoire et voici le gros de mon code ou si vous voulez la facon dont j'essaie de m'y prendre:

    Dans la fiche principale .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cPreferences * pPreferences; // Pointeur sur la classe
    Dans la fiche principale .cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cPreferences * pPreferences = new(cPreferences); // initialise la classe
    FichePrefs->pPrefs = pPreferences;  // Essaie de copier le pointeur sur la classe vers l'autre fiche...
    Dans la fiche secondaire .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cPreferences * pPrefs // Pointeur sur la classe
    Merci.

    PS: J'utilise Borland Builder 5.0 si ca peux vous aider.

  2. #2
    Membre régulier Avatar de AurelieB
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 91
    Points : 100
    Points
    100
    Par défaut
    Bonjour,
    j' ai límpression que le pointeur pPreferences est defini 2 fois.
    Il me semble que de maniere generale, il est bon de s'astreindre a ne pas definir de variable dans un fichier *.h . Si besoin on peut les declarer en extern.

    Bopn courage

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Les deux définitions désignent deux objets différents (sinon le compilateur ne serait pas content)
    Dans le .h de la fiche pincipale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cPreferences * pPreferences;
    (pPreferences est sans doute une donnée membre d'une classe. Sinon une définition de variable n'a pas à figurer dans un .h)
    Dans le .cpp de la fiche principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cPreferences * pPreferences = new(cPreferences);
    pPreferences est ici une variable locale à la fonction où se trouve cette instruction et n'a rien à voir avec le pPreferences du .h
    FichePrefs->pPrefs semble bien initialisé à qq chose de valide, mais le pPreferences du .h non.
    Le code est trop bref pour savoir si l'erreur vient de la confusion possible de ces deux objets de même identificateur. Peut être suffit-il de modifier le .cpp en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pPreferences = new(cPreferences);
    si effectivement pPreferences est une donnée membre d'une classe et la fonction contenant ce code une méthode de cette classe.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    cPreferences est la classe comme tel. Voici ce que contient la classe cPreferences. cPreferences a son propre CPP avec les routines ci dessous.

    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 cPreferences
    {
    private:
    public:
     
         int SauvePrefIni();
         int ChargePrefIni();
     
         //***** Météo Locale******
     
         AnsiString aMeteoLocale_MM;
         AnsiString aMeteoLocale_EC;
         AnsiString aMeteoLocale_VC;
         AnsiString aMeteoLocale_OnglVC;
     
         //****** Radar ************
     
         int iRadarParDefautEC;
     
    };
    Ce que je veux faire en autres mots c'est de passer cet objet qui est le vrai terme si on veux a une autre fiche ( ou plutot son pointeur pour ne pas a voir a creer 2 fois cette objet ) J'essaie de m'exprimer le plus clairement possible mais j'ai tendance au contraire des fois. Les preferences sont gardées dans un objet de type cPreferences dans la fiche principale. Mais je veux que la fiche Preferences ou les preferences sont modifier soit capable de modifier cet objet.

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il vaudrait miex nous montrer la partie du .h où se trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cPreferences * pPreferences;
    et celle du .cpp où il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cPreferences * pPreferences = new(cPreferences);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Voici le .h de la fiche principale :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    //---------------------------------------------------------------------------
     
    #ifndef FichePrincH
    #define FichePrincH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "SHDocVw_OCX.h"
    #include <Menus.hpp>
    #include <OleCtrls.hpp>
    #include <ScktComp.hpp>
    #include <ComCtrls.hpp>
    #include <ToolWin.hpp>
    #include "nclCOMUtil.h"
    #include "PERFGRAP.h"
    #include "Trayicon.h"
    #include <HTTPApp.hpp>
    #include <mshtml.h>
    #include <Buttons.hpp>
    #include <inifiles.hpp>
    #include <ExtCtrls.hpp>
    #include "FichePref.h"
    //#include "ClassePreferences.h"
     
    #include <ImgList.hpp>
    //---------------------------------------------------------------------------
     
     int CONST RADAR_HEIGHT = 515;
     int CONST RADAR_WIDTH = 620;
     int CONST RADAR2_HEIGHT = 371;
     int CONST RADAR2_WIDTH =475;
     
     AnsiString CONST TEPHI_DEBUT = "http://vortex.plymouth.edu/cgi-bin/gen_grbsnd.cgi?id=";
     AnsiString CONST TEPHI_MIL = "&mo=eta4&pl=skewt&ft=";
     AnsiString CONST TEPHI_FIN = "&cu=latest&pt=parcel&size=640x480";
     
     class TMainForm : public TForm
    {
    __published:    // Composants gérés par l'EDI
            TMainMenu *MainMenu1;
            TMenuItem *MnuFichier;
            TMenuItem *CmdSetup;
            TMenuItem *CmdQuitter;
            TMenuItem *N1;
            TStatusBar *StatusBar1;
            TPopupMenu *PMPagesWeb;
            TPageControl *TSPrevLocal;
            TTabSheet *TSImRad;
            TTabSheet *TSTephi;
            TPageControl *PageControl2;
            TTabSheet *TSRadar1;
            TTabSheet *TSRadar2;
            TTabSheet *TSRadar3;
            TTabSheet *TSAvert;
            TCppWebBrowser *WBRadar2_1;
            TCppWebBrowser *WBRadar3;
            TTabSheet *TabSheet1;
            TCppWebBrowser *WBRadar2_2;
            TCppWebBrowser *WBRadar2_3;
            TCppWebBrowser *WBRadar2_4;
            TPageControl *PageControl1;
            TTabSheet *TSPlymouth;
            TTabSheet *TSTephiGraph;
            TCppWebBrowser *WBTephi;
            TGroupBox *GBTephiSettings;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TComboBox *CBHeureTephi;
            TEdit *EditStation;
            TComboBox *CBModeleMeteoTephi;
            TMenuItem *MnuAide;
            TMenuItem *APropos1;
            TPageControl *PageControl3;
            TTabSheet *TabSheet2;
            TTabSheet *TabSheet3;
            TTabSheet *TabSheet4;
            TTabSheet *TabSheet5;
            TBitBtn *BtnRefresh;
            TCppWebBrowser *WBEnvCan;
            TCppWebBrowser *WBMeteoMedia;
            TPageControl *PageControl4;
            TTabSheet *TSECRadarLocal;
            TTabSheet *TSECRadarQC;
            TCppWebBrowser *WBRadar1;
            TGroupBox *GroupBox1;
            TButton *BtnTehpiPlyReload;
            TCppWebBrowser *WBAvertMeteoEC;
            TTrayIcon *TrayIcon1;
            TImageList *ILIcons;
            TMemo *MemoAvertMeteoEC;
            TLabel *Label4;
            TLabel *Label5;
            TMemo *MemoAvertMeteoMM;
            TTimer *TimerAvertMeteo;
            TButton *BtnRefreshAMEC;
            TButton *BtnRafraichirAMMM;
            TButton *Button3;
            TButton *Button4;
            TTabSheet *TSCartesFoudre;
            void __fastcall FormShow(TObject *Sender);
            void __fastcall CBHeureTephiChange(TObject *Sender);
            void __fastcall WBRadar2_1NavigateComplete2(TObject *Sender,
              LPDISPATCH pDisp, TVariant *URL);
            void __fastcall WBRadar2_2NavigateComplete2(TObject *Sender,
              LPDISPATCH pDisp, TVariant *URL);
            void __fastcall WBRadar2_3NavigateComplete2(TObject *Sender,
              LPDISPATCH pDisp, TVariant *URL);
            void __fastcall WBRadar2_4NavigateComplete2(TObject *Sender,
              LPDISPATCH pDisp, TVariant *URL);
            void __fastcall CmdQuitterClick(TObject *Sender);
            void __fastcall CmdSetupClick(TObject *Sender);
            void __fastcall WBAvertMeteoECDocumentComplete(TObject *Sender,
              LPDISPATCH pDisp, TVariant *URL);
     
    private:    // Déclarations utilisateur
    public:        // Déclarations utilisateur
            __fastcall TMainForm(TComponent* Owner);
     
     
            cPreferences * pPreferences;
     
            AnsiString GenerateurAdresseTephi();
            int InitialiserComboBox();
            int BrowserNavigate(TCppWebBrowser * Browser);
            int InitialiserBrowsers();
            int TrouverDerniereImageRadarEC();
     
     
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TMainForm *MainForm;
    //---------------------------------------------------------------------------
    #endif
    Voici le CPP ou est initialiser le new

    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
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "FichePrinc.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma link "PERFGRAP"
    #pragma link "Trayicon"
    #pragma resource "*.dfm"
    TMainForm *MainForm;
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
            : TForm(Owner)
    {
          pPreferences = new(cPreferences);
     
          pPreferences->ChargePrefIni();
     
          // Charger les preferences si existe;
     
          // FichePref->ChargerPreferencesDuFichierIni();
     
    }
    //---------------------------------------------------------------------------

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce code correspond bien à ce que je supposais dans mon post d'hier ( pPreferences membre d'une classe et le new dans une méthode de la classe , ici le constructeur) et ne devrait pas poser de problèmes.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Je crois comprendre mais je ne suis pas certain. Je suis visuel alors un dessin ou plutot du code serait bienvenue.

    Si je comprend bien je mettrais la ligne de code avec le new dans le constructeur de la classe Preferences et ca devrait regler mon probleme ? Je suis un peu melanger. Voici ce que je veux faire si ce peux vous eclairer.

    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
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "FichePrinc.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma link "PERFGRAP"
    #pragma link "Trayicon"
    #pragma resource "*.dfm"
    TMainForm *MainForm;
    //---------------------------------------------------------------------------
    __fastcall TMainForm::TMainForm(TComponent* Owner)
            : TForm(Owner)
    {
          pPreferences = new(cPreferences);
          FichePreferences->pPreferences = pPreferences;
          pPreferences->ChargePrefIni();
     
          // Charger les preferences si existe;
     
          // FichePref->ChargerPreferencesDuFichierIni();
     
    }
    //---------------------------------------------------------------------------

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Et bien je suis fier de moi !!! j'ai resolu mon propre probleme. C'est assez simple. J'ai simplement fait l'inverse de ce que je voulais faire puisque le contraire ne semble pas fonctionner. j'ai retourner le pointeur des preferences de ma fiche preferences vers ma fiche principale.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/12/2010, 09h36
  2. pointeur sur une classe utilisateur
    Par maa dans le forum C#
    Réponses: 15
    Dernier message: 06/07/2007, 16h25
  3. [C++] pointeur sur une classe
    Par PH69 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/11/2005, 22h08
  4. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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