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 :

CList de CList [Fait]


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par d�faut CList de CList
    Bonjour a tous,
    j'ai un petit soucis et je ne sais pas par quel bout le prendre:
    j'ai une classe Gage contenant une CListe et une autre classe preteur contenant une CList de de Gage...
    evidement �a en marche pas si facilement, donc le compilateur m'envoie ch***:
    c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxtempl.h(1210) : error C2582: 'operator =' fonction non disponible dans 'Preteur'
    c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xmemory(137) : lors de la compilation de la fonction membre du mod�le de classe 'void CList<TYPE,ARG_TYPE>:ump(CDumpContext &) const'
    with
    [
    TYPE=Preteur,
    ARG_TYPE=Preteur &
    ]
    c:\Documents and Settings\jeremie\Mes documents\Visual Studio Projects\RO\ChezMaTanteJCJZ\ChezMaTanteJCJZ\ChezMaTanteJCJZ.h(28) : voir la r�f�rence � l'instanciation du mod�le de classe 'CList<TYPE,ARG_TYPE>' en cours de compilation
    with
    [
    TYPE=Preteur,
    ARG_TYPE=Preteur &
    ]
    d'ou vient le probleme et comment le resoudre?
    Merci d'avance
    dudesque

  2. #2
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Bonjour,

    un bout de code pourrait nous aider � te r�pondre

  3. #3
    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
    la CList ne possede pas d'op�rateur de copie ou de constructeur de copie, meme chose pour ta classe Gage qui doit les fournir.
    le probleme est resolvable comme suit:

    utiliser une CList qui dispose de l'operateur de copie:
    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
     
    #ifndef __LIST_EX_H__
    #define __LIST_EX_H__
     
    #ifndef __AFXTEMPL_H__
        #include <afxtempl.h>
    #endif
     
    ////////////////////////////////////////////////////////////////////////////
     
    template< class TYPE, class ARG_TYPE>
    class CListEx : public CList<TYPE, ARG_TYPE>
    {
    // Construction
    public:
        CListEx (int nBlockSize = 10);
        CListEx (const CListEx &x);
     
    // Assigment
    public:
        CListEx &operator = (const CListEx &x);
     
    };
     
    template< class TYPE, class ARG_TYPE>
    inline
        CListEx<TYPE,ARG_TYPE>::CListEx(int nBlockSize)
        :    CList<TYPE,ARG_TYPE>(nBlockSize)
    {
    }
     
    template< class TYPE, class ARG_TYPE>
    inline
        CListEx<TYPE,ARG_TYPE>::CListEx(const CListEx &x)
    {
        *this = x;
    }
     
    template< class TYPE, class ARG_TYPE>
    inline CListEx<TYPE,ARG_TYPE> &
        CListEx<TYPE,ARG_TYPE>::operator = (const CListEx &x)
    {
        if(this != &x)
        {
            TYPE tDst;
            TYPE tSrc;
            POSITION pos;
     
            RemoveAll();
            pos = x.GetHeadPosition();
            while(pos != NULL)
            {
                tSrc = x.GetNext(pos);
                CopyElements<TYPE>(&tDst,&tSrc,1);
                AddTail(tDst);
            }
        }
     
        return *this;
    }
     
    #endif
    ensuite rajouter l'operateur de copie et le constructeur de copie a ta classe en s'appuyant sur le model suivant:
    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
     
    // la classe qui contient les données 
    class Gage : public CObject
    {
    public:
        DECLARE_SERIAL( Gage )
     
        Gage(){Clear();}
        //-----------------------------
        ~Gage(){}
        //-----------------------------
         // constructeur de copie
        Gage(const Gage &rItem)
        {
            CopyFrom(rItem);
        }
        //-----------------------------
        // operateur d'affectation
        const Gage& operator=(const Gage& Src)
        {
            CopyFrom(Src);
            return *this;
        }
        //-----------------------------
        // effacer les données.
        void Clear()
        {
     //......   
        }
        //-----------------------------
        // copier les données d'une source.
        void CopyFrom(const  Gage& Src )
        {
            if(this==&Src) return;
     
            Clear(); // clear eventuel.
            // copie des données ici a faire...
       }
    //....
     };
    apres on pourra ecrire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    typedef CListEx< Gage,Gage &> ListGage;
    typedef CList<ListGage,ListGage &> ListOfListGage;

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par d�faut
    merci a tout deux de vous pencher si rapidement sur les problemes des aprentis codeur que nous sommes ;p
    je regarde ta solution fairscape ( d'ailleur c'est pas comme si �a fesait 2 jours que j'epluches tes reponses mfc sur ce forum ;p)
    et je vous tient au courant

  5. #5
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    wow, �a fait plaisir de voir du code comme �a
    A propos, savez-vous les raisons pour lesquelles CList ne possede pas d'op�rateur de copie ou de constructeur de copie. Pourquoi les d�veloppeurs de microsoft ne l'on pas impl�ment�?

  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
    Par d�faut
    je me le demande bien !
    j'ai la meme chose pour une CMap...

  7. #7
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Et surtout, si l'envie te prend de poster le code de ton CMapEx, sache que rien ni personne ne t'en emp�che

  8. #8
    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
    bon puisque c'est demand� si gentiment:


    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
     
    #ifndef __MAPEX_H__
    #define __MAPEX_H__
     
    #if _MSC_VER < 0x0600
        #pragma warning(disable : 4786) //identifier was truncated to '255' characters in the debug information
    #endif
     
    #ifndef __AFXTEMPL_H__
        #include <afxtempl.h>
    #endif
     
    // specialization for CString 
    // extract of CMapStringToPtr::HashKey(LPCTSTR key) const  :)
    template<> 
    inline UINT AFXAPI HashKey<CString> (CString strKey)
    {
        LPCSTR key = strKey;
        UINT nHash = 0;
        while (*key)
        {
            nHash = (nHash<<5) + nHash + *key++;
        }
        return nHash;
    }
     
    template<> 
    inline UINT AFXAPI HashKey<CString&> (CString& strKey)
    {
        LPCSTR key = strKey;
        UINT nHash = 0;
        while (*key)
        {
            nHash = (nHash<<5) + nHash + *key++;
        }
        return nHash;
    }
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    class CMapEx : public CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>
    {
     
    public:
     
        CMapEx(int nBlockSize = 10);
       // copy constructor
        CMapEx(const CMapEx &x);
     
        // assigment operator
        CMapEx &operator = (const CMapEx& x);
     
        //The List element currently at this index like CArray
        VALUE GetAt(int nIndex,KEY &rKey) const;
     
        //Gets the number of elements in this List like CArray
        int GetSize( ) const; 
     
    };
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    inline CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE>::CMapEx(int nBlockSize)
        :CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>(nBlockSize)
    {
    }
     
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    inline CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE>::CMapEx(const CMapEx &x)
    {
        *this = x;
    }
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    inline CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE> &
           CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE>::operator = (const CMapEx& x)
    {
        KEY rKey;
        VALUE rValue;
        POSITION pos = x.GetStartPosition();
     
        RemoveAll();
        while(pos != NULL)
        {
            x.GetNextAssoc(pos,rKey,rValue);
            SetAt(rKey,rValue);
        }
        return *this;
    }
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    inline VALUE CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetAt(int nIndex,KEY &rKey) const
    {
        ASSERT(nIndex >= 0 && nIndex < GetCount());
     
        POSITION pos = GetStartPosition();    
        VALUE rValue;
     
        do    
        {
            GetNextAssoc(pos,rKey,rValue);
        }while(nIndex --);
     
        return rValue;
    }
     
    template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
    inline int CMapEx<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetSize( ) const
    {
        return GetCount();
    }
    #endif
    exemple:
    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
     
       CMapEx<CString ,CString,CString ,CString> map;
        CMapEx<CString ,CString,CString ,CString> map2;
     
        map.SetAt("VC-MODO1","Farscape");
        map.SetAt("VC-MODO2","Nico");
         map.SetAt("VC-MODO3","BigBoom");
     
        map2=map;
        CString key;
        for(int i=0;i<map2.GetSize();i++)
        {
            TRACE("\n%s",(const char *)map2.GetAt(i,key));
            TRACE("\n%s",(const char *)key);
        }
    vla

  9. #9
    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

  10. #10
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut


Discussions similaires

  1. Tri Rapide sur un CLIST
    Par ensisoft dans le forum MFC
    R�ponses: 9
    Dernier message: 13/12/2005, 23h22
  2. R�ponses: 5
    Dernier message: 29/08/2005, 14h51
  3. erreur quand je veux remplir une CList :
    Par stof dans le forum MFC
    R�ponses: 10
    Dernier message: 03/02/2005, 16h18
  4. Comment remplire une CList ?
    Par stof dans le forum MFC
    R�ponses: 23
    Dernier message: 02/02/2005, 17h33
  5. [MFC] CList et CComboBox
    Par jonzuzu dans le forum MFC
    R�ponses: 9
    Dernier message: 11/05/2004, 14h59

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