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
15266
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2022
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