A en devenir FOU!!! E2094 'operator+' non implémenté dans le type 'TArrayObject3

misterxavier999 Messages postés 2 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 9 décembre 2005 - 7 déc. 2005 à 23:38
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 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; }

cout << left << setw(20) << pobj3d->ToString() << " \tArea: \t"

<< setw(10)
<< pobj3d->Area() << " \tVolume: \t" << setw(10)

<< pobj3d->Volume() << endl;

}

//---------------------------------------------------------------------------

void ShowArrayObject3d(const TArrayObject3d& aobj3d)

{

for (int i=0;i

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
8 déc. 2005 à 01:33
class IObject3d
{
};

class TArrayObject3d
{
public:
TArrayObject3d();
IObject3d* operator[](int);
private:
vector vectPtrObj3d;
};

TArrayObject3d::TArrayObject3d()
{
}

IObject3d* TArrayObject3d::operator [](int i)
{
return vectPtrObj3d[i];
}

int main(int argc, char* argv[])
{
TArrayObject3d aobj3d;
IObject3d* i = aobj3d[1];
}

Sous VC++ 2005, ca passe sans problème. Cela passe-t-il aussi avec ton compilo
0
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 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)

IObject3d* TArrayObject3d::operator[](int i) const ??

voilà, donne des nouvelles.. bonne progr
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
9 déc. 2005 à 16:28
Oui ca revient au même, étant donné que #define NULL 0
+1 pour le const
0
misterxavier999 Messages postés 2 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 9 décembre 2005
9 déc. 2005 à 17:55
Bonjour a tous,



Merci pour vos replys, en fait, après avoir lu vos réponses, et modifié mon code : c'était un problème de const.

Voilà, donc : la syntaxe correcte :

.h :



const IObject3d* operator[](int)const;





.cpp :



const IObject3d* TArrayObject3d::operator[](int i)const

{

return vectPtrObj3d[i];

}



Merci beaucoup pour votre aide!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kortin Messages postés 65 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 21 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+
0
Rejoignez-nous