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 :

CArray => erreur C2248


Sujet :

MFC

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut CArray => erreur C2248
    Bonsoir à tous.

    J'ai l'erreur de compilation suivante : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' lorsque je tente d'utiliser un tableau
    d'objet défini avec typedef. Je m'explique, j'ai une classe Calibre toute simple qui implémente un constructeur de recopie et un constructeur d'affectation.
    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
    class AFX_EXT_CLASS Calibre
    {
    public:
    	Calibre();
    	Calibre(const Calibre& calibre);
    	Calibre& operator = (const Calibre& calibre);
    	virtual ~Calibre();
     
    	CString GetCode() const { return m_strCode; }	
    	CString GetLibellé() const { return m_strLibellé; }
     
    	void SetCode (const CString& code) { m_strCode = code; }	
    	void SetLibellé (const CString& libellé) { m_strLibellé = libellé; }
     
    private:
    	CString m_strCode;
    	CString m_strLibellé;
    };
     
    typedef CArray<Calibre, Calibre&> ListCalibres;      // La déclaration ne pose pas de problème
    Ensuite dans une autre classe j'aimerai qu'une fonction me retourne une liste de calibre.
    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
    class AFX_EXT_CLASS CalibreManager
    {
    public:
    	CalibreManager(FbConnexion *pDatabase = NULL);
    	~CalibreManager();
     
    	void Select();
    	ListCalibres Select2();
     
    private:
    	FbConnexion *m_pDatabase;
    	CArray<Calibre, Calibre&> m_listCalibres;
    };
     
    // Dans mon fichier cpp
     
    // Select() => rempli une liste de calibre définie comme variable membre de ma classe CalibreManager
    void CalibreManager::Select()
    {
           Calibre calibre;
           // Je récupère mes données dans une base de données Firebird
           // et je rempli une liste définie comme variable membre de ma classe
           m_listCalibres.Add(calibre);  // Ok, rempli bien ma liste
    }
     
    ListCalibres CalibreManager::Select2()
    {
           ListCalibres lstCalibres;    // Erreur de compilation C2248 ?
     
           return lstCalibres;
    }
    Je ne vois pas mon erreur, la variable m_listCalibres définie sans typedef se rempli bien alors qu'avec une définition "globale" du type typedef cela ne fonctionne pas.
    De plus l'erreur mentionne la classe CObject que je n'utilise pas.

    Avez vous une idée ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça me parait bizarre, que tu précises Calibre& en tant que second argument template de CArray. Pourquoi exiger une référence non-constante, plutôt que laisser le type par défaut (référence const)?

    Pour ton erreur, CArray hérite de CObject et ne définit pas de constructeur de copie propre, alors que CObject est non-copiable (le constructeur de copie de CObject est privé et non-défini). Cela signifie que CArray est non-copiable également, et qu'il ne peut donc pas être retourné par valeur.

    PS: Pour référence, quelle version de Visual Studio (et donc, de MFC) utilises-tu?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2006
    Messages : 562
    Points : 859
    Points
    859
    Par défaut
    Merci de m'avoir éclairé Médinoc, en effet j'ai crée une classe template dérivée de CArray comme Farscape le précise dans la FAQ en implémentant un contructeur de recopie et un opérateur d'affectation. Ca fonctionne.

    PS: Je travail sous Visual Studio 2010 avec les MFC 10.0.

    Cordialement.

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

Discussions similaires

  1. CArray et erreur C2248
    Par dada89 dans le forum MFC
    Réponses: 1
    Dernier message: 09/06/2011, 17h12
  2. erreur C2248 bizarre
    Par pipilu dans le forum Visual C++
    Réponses: 2
    Dernier message: 09/03/2011, 12h25
  3. Erreur dans un CArray d'une classe créée (error C2248)
    Par cricri-larson dans le forum MFC
    Réponses: 6
    Dernier message: 16/07/2009, 11h11
  4. Réponses: 14
    Dernier message: 03/07/2006, 16h55
  5. [VC++6] Erreur avec CArray
    Par fraaalesi dans le forum MFC
    Réponses: 15
    Dernier message: 30/09/2005, 12h59

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