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] [CArray] Pb operateur=


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut [MFC] [CArray] Pb operateur=
    Salut tout le monde !

    Avant de poser mes questions, voici un peu d'informations sur le contexte.

    Je suis en train de développer une application qui se compose de trois classes :
    * classe CCoupJoue
    * classe CTrou
    * classe CModeleDeCarteDeParcours

    La classe CCoupJoue ne possède rien de spécial, juste quelques attributs.

    La classe CTrou possède un tableau d'objets de la classe CCoupJoue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CArray<CCoupJoue, CCoupJoue> m_tabCoupsJoues;
    Le constructeur de recopie de la classe CTrou effectue les opérations suivantes :
    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
     
    CTrou::CTrou(const CTrou &unTrou)
    {
    	this->m_pAfficheur	=	unTrou.m_pAfficheur;
    	this->m_nPar		=	unTrou.m_nPar;
    	this->m_nDistance	=	unTrou.m_nDistance;
    	this->m_nCoupsRecus	=	unTrou.m_nCoupsRecus;
     
    	this->m_tabCoupsJoues.SetSize(unTrou.m_tabCoupsJoues.GetSize());
    	for(int nIndex=0; nIndex<this->m_tabCoupsJoues.GetSize(); nIndex++)
    		this->m_tabCoupsJoues.SetAt(nIndex, unTrou.m_tabCoupsJoues.GetAt(nIndex));
     
    	if( this->m_pAfficheur )
    		this->m_pAfficheur->Afficher("Appel du constructeur de recopie de la classe CTrou");
     
    }
    A ce niveau, je test et tout fonctionne (compilation, édition des liens et exécution) correctement, notamment le constructeur de recopie.

    La classe CModeleDeCarteDeParcours possède un tableau d'objets de la classe CTrou.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CArray<CTrou, CTrou> m_tabTrous;
    Le constructeur de recopie de la classe CModeleDeCarteDeParcours réalise les opération suivantes :
    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
     
    CModeleDeCarteDeParcours::CModeleDeCarteDeParcours(const CModeleDeCarteDeParcours &unParcours)
    {
    	this->m_pAfficheur			=	unParcours.m_pAfficheur;
    	this->m_szNomDuModele		=	unParcours.m_szNomDuModele;
    	this->m_szNomDuGolf			=	unParcours.m_szNomDuGolf;
    	this->m_szAdresseNumero		=	unParcours.m_szAdresseNumero;
    	this->m_szAdresseRue		=	unParcours.m_szAdresseRue;
    	this->m_szAdresseCodePostal	=	unParcours.m_szAdresseCodePostal;
    	this->m_szAdresseVille		=	unParcours.m_szAdresseVille;
    	this->m_szAdresseTelephone	=	unParcours.m_szAdresseTelephone;
     
    	this->m_tabTrous.SetSize(unParcours.m_tabTrous.GetSize());
    	for(int nIndex=0; nIndex<this->m_tabTrous.GetSize(); nIndex++)
    		this->m_tabTrous.SetAt(nIndex, unParcours.m_tabTrous.GetAt(nIndex));
     
    	if( this->m_pAfficheur )
    		this->m_pAfficheur->Afficher("Appel du constructeur de recopie de la classe CModeleDeCarteDeParcours");
    }
    A ce niveau je test et j'obtiens l'erreur de compilation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(259) : error C2582: 'CTrou' : 'operator =' function is unavailable
            c:\program files\microsoft visual studio\vc98\include\xstring(583) : while compiling class-template member function 'void __thiscall CArray<class CTrou,class CTrou>::SetAt(int,class CTrou)'
    Je précise que pour aucune des 3 classes je n'ai implémenté l'opérateur =.

    Ce qui m'amène à mes questions :
    (1) Pourquoi n'ai je pas la même erreur de compilation dans le constructeur de recopie de la classe CTrou ?
    (2) Suis je obligé d'implémenter l'opérateur = pour résoudre mon problème ou s'agit il d'une autre erreur ?
    (3) Quel est le rôle de l'opérateur = ? Comment l'implémenter ?

    D'avance merci pour votre aide.

  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 prendre pour habitude avec les containeurs list ,array etc .. de definir le constructeur de copie et l'operateur d'affectation.
    1) je ne vois pas pourquoi il y aurait une erreur dedans .
    2) oui
    3):
    code general:
    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
     
    //-----------------------------
         // constructeur de copie
        CItem(const CItem &rItem)
        {
            CopyFrom(rItem);
        }
        //-----------------------------
        // operateur d'affectation
        const CItem& operator=(const CItem& Src)
        {
            CopyFrom(Src);
            return *this;
        }
        //-----------------------------
        // copier les données d'une source.
        void CopyFrom(const CItem & Src )
        {
            if(this==&Src) return;
     
            Clear(); // clear eventuel des données avant copie (a implementer).
            // la copie membre a membre
            m_xxx    =Src.m_xxx;
    // ...........
     
       }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Par défaut
    Ok, j'ai implémenté l'operateur = et je n'ai plus d'erreur de compilation

    Par contre j'ai constaté que l'utilisation du class Wizard n'ajoutait pas correctement la fonction :
    * elle est bien ajoutée dans le .cpp
    * elle ne l'est pas dans le .h du coup je dois le faire à la main

    C'est normal ça ?

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

Discussions similaires

  1. [MFC] CArray et classe dérivée?
    Par TigreRouge dans le forum MFC
    Réponses: 14
    Dernier message: 02/08/2005, 22h45
  2. [MFC] CArray dans Copyfrom
    Par Gloubi99 dans le forum MFC
    Réponses: 5
    Dernier message: 22/07/2005, 10h11
  3. [MFC] ADO et operateur delete
    Par 0xYg3n3 dans le forum MFC
    Réponses: 9
    Dernier message: 26/03/2005, 14h38
  4. [Debutant][MFC]CArray
    Par gwendo dans le forum MFC
    Réponses: 3
    Dernier message: 23/03/2005, 17h22
  5. [Débutant][MFC] CArray
    Par gwendo dans le forum MFC
    Réponses: 2
    Dernier message: 21/03/2005, 10h00

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