[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:
1 2
|
CArray<CCoupJoue, CCoupJoue> m_tabCoupsJoues; |
Le constructeur de recopie de la classe CTrou effectue les opérations suivantes :
Code:
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:
1 2
|
CArray<CTrou, CTrou> m_tabTrous; |
Le constructeur de recopie de la classe CModeleDeCarteDeParcours réalise les opération suivantes :
Code:
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:
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.