This ne pointe pas sur le bin objet

Résolu
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009 - 1 juil. 2009 à 15:01
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009 - 17 juil. 2009 à 15:37
Bonjours à tous,

Je viens à nouveau faire un appel au secours pour m'aider à me sortir de ce problème que je train depuis pas mal de temps maintenant.

Je suis en train de faire une librairie qui regrouperas les objets c++ les plus usuels (point, vecteurs...) et je suis tombé sur un problème que je ne peux expliquer.
Il y à plusieurs bibliothèques. Chacune des classe dérive de la classe Object. Pour la librairie Geom chacune des classe dérive à son tour de la classe GeomObject.
Le problème vient de la classe vecteur (qui utilise deux instance de la classe point). Lorsque je fait une affectation le compilateur me renvoie :

In member function `dza::dzPoint& dza::dzVecteur<VEC_TYPE>::operator=(const dza::dzVecteur<VEC_TYPE>&) [with VEC_TYPE = float]'
instantiated from here
error: invalid initialization of reference of type 'dza::dzPoint<float>&' from expression of type 'dza::dzVecteur<float>'

instantiated from here pointe sur ces deux ligne :
    v1.operator=(v2);
    v2=v1;

error: invalid initialization of ref... pointe sur :
    template <class VEC_TYPE>
    dzVecteur<VEC_TYPE>& dzVecteur<VEC_TYPE>::operator=(const dzVecteur<VEC_TYPE> &vec) {
        mpt1=vec.pt1();
        mpt2=vec.pt2();

        return *this;
    }
 Ce que je ne comprend pas c'est que this est bel et bien de type vecteur ????

Voila si je n'ais pas été claire fait moi signe

Damien

<hr size="2" width="100%" />*Les fautes d'orthographes jointes à la présente missive, sont la propriété exclusive de l'auteur. Toute copie illégale pourra être passive de poursuites judiciaires, et soumises à des peines et sanctions exemplaires.

6 réponses

Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
17 juil. 2009 à 15:37
Bon ba j'ai mis à jours gcc et tout fonctionne corectement...
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
1 juil. 2009 à 17:13
Est-ce-que pour le type de retour de la fonction tu as bien mis partout (déclaration, inplémentation) dzVecteur<VEC_TYPE>& ?
Parce qu'on dirait vraiment qu'il s'attend à avoir un dzPoint& en sortie.
0
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
1 juil. 2009 à 17:28
Oui dans la déclaration et l'implémentation sont bien identiques. Le type retour est bien dzVecteur<VEC_TYPE>&.
A croire que GCC est devenu fou !!!

<hr size="2" width="100%" />*Les fautes d'orthographes jointes à la présente missive, sont la propriété exclusive de l'auteur. Toute copie illégale pourra être passive de poursuites judiciaires, et soumises à des peines et san
0
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
16 juil. 2009 à 17:05
Personne n'a d'idée ?
0

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

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
17 juil. 2009 à 09:28
Hello,
Voici comment je code la surcharge de l'opérateur =
MyClass &MyClass::operator=(const MyClass &source)
{
  // ton code

  return *this;
}


En espérant que cela t'aide
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
17 juil. 2009 à 13:57
Merci mais j'utilise le même prototype. Sinon Par curiosité j'ai essayé ca :
template <class VEC_TYPE>
dzVecteur<VEC_TYPE> dzVecteur<VEC_TYPE>::operator=(const dzVecteur<VEC_TYPE> &vec) {
mpt1=vec.pt1();
mpt2=vec.pt2();

return dzPoint<VEC_TYPE>(2.0,3.6,4.2);

//		return *this;
}


Ça compile et ça fonctionne parfaitement. Je commence à être désespéré. J'ai par contre oublié de préciser que la compilation de la bibliothèque ne pose pas de problème. C'est lors de la compilation du soft client que le compilateur me jette. C'est tout à fait normal du fait de l'utilisation de template qui ne peuvent être compilé sans savoir le type.
0
Rejoignez-nous