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.
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 CArray<CCoupJoue, CCoupJoue> m_tabCoupsJoues;
A ce niveau, je test et tout fonctionne (compilation, édition des liens et exécution) correctement, notamment le constructeur de recopie.
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"); }
La classe CModeleDeCarteDeParcours possède un tableau d'objets de la classe CTrou.
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 CArray<CTrou, CTrou> m_tabTrous;
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
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"); }
Je précise que pour aucune des 3 classes je n'ai implémenté l'opérateur =.
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)'
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.
Partager