A en devenir FOU!!! E2094 'operator+' non implémenté dans le type 'TArrayObject3
misterxavier999
Messages postés2Date d'inscriptionmardi 25 octobre 2005StatutMembreDernière intervention 9 décembre 2005
-
7 déc. 2005 à 23:38
kortin
Messages postés65Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention21 avril 2006
-
10 déc. 2005 à 17:05
Bonjour à tous,
Je vous expose mon problème :
J'ai une classe : "
TArrayObject3d", et celle-ci
contient en private un vecteur qui contient des pointeurs sur des
objets3d. Et qui ressemble à ce qui est marqué ci-dessous (.H).
Bref, à un moment, dans mon main, je crée une instance de la classe
TArrayObject3d , et cet objet s'appellera : "aobj3d"
donc, je le déclare comme ceci : TArrayObject3d aobj3d(4);//Jusque là rien d'anormal.
Mais dans mon main, je fais appel à une fonction
(ShowArrayObject3d
) qui souhaiterait accéder à un des objet3d que contient mon vecteur. Donc, je lui donne mon aobj3d (instance de la classe
TArrayObject3d
). Ensuite, en faisant :
aobj3d[i], on m'impose de surcharger mon opérateur [ ] puisqu'il n'est pas défini pour des
TArrayObject3d. Je voudrais qu'en faisant aobj3d[i] en fait, je puisse renvoyer mon pointeur sur objet3d, comme ceci :
aobj3d.
vectPtrObj3d[i]. (Mais je ne peux pas le faire puisque
vectPtrObj3d est privé, et cela m'est imposé. )
Le compilateur me met une erreur :
[C++ Erreur]
IntSortArrayObj3d_Demo.cpp(90): E2094 'operator+' non implémenté dans
le type 'TArrayObject3d' pour les arguments de type 'int'
ALORS QUE je ne veux pas surcharger l'opérateur +, mais l'opérateur [
]. Et que pour moi, mon implémentation a l'air tout à fait correcte et
je ne comprends pas d'ou viens l'erreur..
J'espère que vous comprendrez mon code, et que cela pourra vous aider.
Merci!
//FICHER TArrayObject3d
.H
class TArrayObject3d {
public:
...
TArrayObject3d(int initSize= 0);
...
IObject3d* operator[](int);
...
private:
vector vectPtrObj3d;
...
};
//FICHIER
TArrayObject3d
.CPP - Voici ma surcharge d'opérateur [ ] dans mon fichier cpp.
IObject3d* TArrayObject3d::operator[](int i)
{
return vectPtrObj3d[i];
}
//Mon main
int main(int argc, char* argv[])
{
TArrayObject3d aobj3d(4);//Le 4 n'est utilisé que dans le constructeur
pour créer un "tableau" de 4 pointeurs sur IObject3d.
...
ShowArrayObject3d(aobj3d);
...
}//Fin du main
void ShowObject3d(const IObject3d* pobj3d)
{
if (pobj3d ==0) { cout << "No objet3D" << endl; return; }
kortin
Messages postés65Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention21 avril 2006 9 déc. 2005 à 16:21
Je ne sais pas d'où vient le problème, le compilo donne t'il la ligne où il y a l'erreur ?
Toutefois, deux choses me semblent peut être pas très bon :
1/
if (pobj3d==0) or prob3d est un pointeur
> if (pobj3d=NULL)
peut être que ça revient au même.
2/
IObject3d* TArrayObject3d::operator[](int i)
Je mettrais cette fonction constante, car tu fais aobj3d[i]); et const TArrayObject3d& aobj3d)
kortin
Messages postés65Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention21 avril 2006 10 déc. 2005 à 17:05
Content de t'avoir aidé.
Moi aussi, j'ai souvent eu des soucies avec les const.
La solution : soit ne jamais en mettre et se faire confiance ou bien y penser dès le début et toujours.
Allé, a+