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 :

Erreur dans un CArray d'une classe créée (error C2248)


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut Erreur dans un CArray d'une classe créée (error C2248)
    Bonjour,

    j'ai créé la classe "experimentateur", et j'en ai profité pour mettre dans le .H un CArray de 'experimentateur'

    experimentateur.h
    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
    #pragma once
     
    #include <string>
     
    class Experimentateur
    {
    public:
    	Experimentateur(void);
    	~Experimentateur(void);
    public:
    	std::string nom;
    	std::string surnom;
    };
     
    typedef CArray<Experimentateur, Experimentateur*> CArrayExperimentateur;
    experimentateur.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "StdAfx.h"
    #include "Experimentateur.h"
     
    Experimentateur::Experimentateur(void):nom(""),surnom("")
    {
    }
     
    Experimentateur::~Experimentateur(void)
    {
    }
    Et j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtempl.h(267) : error C2248: 'CObject::CObject'*: impossible d'accéder à private membre déclaré(e) dans la classe 'CObject'
    1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(551)*: voir la déclaration de 'CObject::CObject'
    1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(522)*: voir la déclaration de 'CObject'
    1>        Le diagnostic s'est produit dans la fonction 'CArray<TYPE,ARG_TYPE>::CArray(const CArray<TYPE,ARG_TYPE> &)' générée par le compilateur
    1>        with
    1>        [
    1>            TYPE=Experimentateur,
    1>            ARG_TYPE=Experimentateur *
    1>        ]
    Et je n'arrive pas à comprendre d'où vient l'erreur, quelle application il faut faire...

    Merci par avance de votre aide,
    Christophe

  2. #2
    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
    Par défaut
    salut,
    ta classe expérimentateur ne fournit pas de constructeur de copie.
    voir ce post de la faq pour exemple:
    http://cpp.developpez.com/faq/vc/ind...HowToSerialize

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    J'ai modifié la classe Experimentateur ainsi :

    Experimentateur.h
    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
    #pragma once
     
    // Cible de la commande CExperimentateur
     
    #include <string>
     
    class CExperimentateur : public CObject
    {
    public:
    	CExperimentateur();
    	virtual ~CExperimentateur();
     
    public:
        DECLARE_SERIAL( CExperimentateur )
     
        //-----------------------------
         // constructeur de copie
        CExperimentateur(const CExperimentateur &rExperimentateur);
        //-----------------------------
        // operateur d'affectation
        const CExperimentateur& operator=(const CExperimentateur& Src);
        //-----------------------------
        // effacer les données.
        void Clear();
        //-----------------------------
        // la methode de serialisation.
     
        void Serialize(CArchive& ar);
     
        //-----------------------------
        // copier les données d'une source.
        void CopyFrom(const CExperimentateur & Src );
        //-----------------------------
        // dump pour test
        CString GetStrDump();
        // les données.
    	std::string nom;
    	std::string surnom;
     
    };
     
    template<> void AFXAPI SerializeElements<CExperimentateur> (CArchive& ar, CExperimentateur* pElements, int nCount);
     
    // la gestion d'un tableau de cette classe .
    typedef CArray<CExperimentateur,CExperimentateur&> CArrayExperimentateur;
    Experimentateur.cpp
    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
    // Experimentateur.cpp*: fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "LectureXMLKaollaMFC2.h"
    #include "Experimentateur.h"
     
    // CExperimentateur
     
    CExperimentateur::CExperimentateur()
    {
    }
     
    CExperimentateur::~CExperimentateur()
    {
    }
     
    // Fonctions membres CExperimentateur
        //-----------------------------
         // constructeur de copie
        CExperimentateur::CExperimentateur(const CExperimentateur &rExperimentateur)
        {
            CopyFrom(rExperimentateur);
        }
        //-----------------------------
        // operateur d'affectation
        const CExperimentateur& CExperimentateur::operator=(const CExperimentateur& Src)
        {
            CopyFrom(Src);
            return *this;
        }
        //-----------------------------
        // effacer les données.
        void CExperimentateur::Clear()
        {
            nom="";
            surnom="";
        }
        //-----------------------------
        // la methode de serialisation.
     
        void CExperimentateur::Serialize(CArchive& ar)
        {
            if(ar.IsStoring())
                ar << nom << surnom;
            else
                ar >> nom >> surnom;
        }
     
        //-----------------------------
        // copier les données d'une source.
        void CExperimentateur::CopyFrom(const CExperimentateur & Src )
        {
            if(this==&Src) return;
     
            Clear(); // clear eventuel.
     
            nom    =Src.nom;
            surnom =Src.surnom;
       }
        //-----------------------------
        // dump pour test
        CString CExperimentateur::GetStrDump()
        {
    		CString result;
    		result.Format("%s/%s", nom.c_str(), surnom.c_str());
    		return result;
            //return ( nom + "/" + surnom);
        }
    J'ai toujours ce problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1>ParserXML.cpp
    1>c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtempl.h(267) : error C2248: 'CObject::CObject'*: impossible d'accéder à private membre déclaré(e) dans la classe 'CObject'
    1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(551)*: voir la déclaration de 'CObject::CObject'
    1>        c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(522)*: voir la déclaration de 'CObject'
    1>        Le diagnostic s'est produit dans la fonction 'CArray<TYPE,ARG_TYPE>::CArray(const CArray<TYPE,ARG_TYPE> &)' générée par le compilateur
    1>        with
    1>        [
    1>            TYPE=CExperimentateur,
    1>            ARG_TYPE=CExperimentateur &
    1>        ]
    Et aussi la fonction Serialize qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1>c:\documents and settings\giovannangeli\mes documents\visual studio 2008\
    projects\apprentissage\lecturexml\copie de lecturexmlkaollamfc2\
    lecturexmlkaollamfc2\experimentateur.cpp(51) : 
    error C2678: '<<' binaire*: aucun opérateur trouvé qui accepte un opérande de 
    partie gauche de type 'CArchive' (ou il n'existe pas de conversion acceptable)
    cette ligne correspondant à et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1>c:\documents and settings\giovannangeli\mes documents\visual studio 2008\
    projects\apprentissage\lecturexml\copie de lecturexmlkaollamfc2\
    lecturexmlkaollamfc2\experimentateur.cpp(53) : 
    error C2679: '>>' binaire*: aucun opérateur trouvé qui accepte un opérande de 
    partie droite de type 'std::string' (ou il n'existe pas de conversion acceptable)
    cette ligne correspondant à

  4. #4
    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
    Par défaut
    il manque le implement_serial dans le .cpp.
    Carchive ne dispose pas d'operateur << ou >> pour une std:string mais pour une CString.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Une fois de plus, ça ne marchait pas.

    J'ai laché l'affaire et je suis passer par les "vector"...

    Merci malgré tout pour les réponses données. Mais j'ai surement zappé pas mal de choses, désolé.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    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 526
    Par défaut
    Salut Cri-cri larson je ne conseille pas trop de mélanger STL et MFC.
    Si tu veux utiliser une classe 100% MFC prend CString au lieu de std::string

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 20
    Par défaut
    Conseil pris... Merci.
    Je tacherai de faire attention la prochaine et de modifier (voir purifier) un peu mon code :p

    Mais comme j'utilise les vectors finalement, c'est mieux que je garde les std::string non ???

Discussions similaires

  1. Erreur dans l'alimentation d'une liste de class
    Par m_brun dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/06/2012, 11h10
  2. erreur dans la declaration d'une classe
    Par lylya dans le forum Débuter
    Réponses: 9
    Dernier message: 13/04/2010, 15h09
  3. Instancier une classe crée dans une autre application
    Par Yvan49 dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/02/2009, 19h29
  4. Réponses: 1
    Dernier message: 06/05/2008, 10h10
  5. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47

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