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.