Opérateur de comparaison dans une classe générique [Résolu]

Messages postés
96
Date d'inscription
vendredi 17 décembre 2004
Dernière intervention
13 juillet 2007
- - Dernière réponse : Hylvenir
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Dernière intervention
5 octobre 2006
- 14 mai 2006 à 01:02
Bonjour,

Je crois que pas mal d'infos sont dans le titre, il ne manque plus que la source de la classe :


#pragma once
#include "StdAfx.h"

using namespace std;

template <class T>
class Point
{
T x;
T y;
public:
Point(void);
~Point(void);

void affich();
void set(T, T);

friend ostream& operator<<(ostream &os, const Point<T> &)
{
os << "affichage" << std::endl;
return os;
}

bool operator==(const Point<T> &c);

};

template <class T> Point<T>::Point(void)
{
std::cout << "on entre dans le constructeur" << std::endl;
}

template <class T> Point<T>::~Point(void)
{
std::cout << "on entre dans le destructeur" << std::endl;
}

template <class T> void Point<T>::affich()
{
std::cout << "On affiche " << this->x << ", " << this->y << std::endl;
}

template <class T> void Point<T>::set(T x, T y)
{
this->x = x;
this->y = y;
}

//surcharge de l'opérateur d'égalité. test ok
template <class T> bool Point<T>::operator ==(const Point<T> &c)
{
//HACK : je ne suis pas sûr, mais je pense qu'il faut comparer les valeurs

if(this->x == c.x)
{
return true;
}
else
{
return false;
}
}




La facon, dont j'utilise cette classe :

Point <double> p;
Point <double> p2;

p.set(3.7,5.6);
p2.set(4.3,6.9);

std::cout << p < p2; //ERREUR ici


et l'erreur renvoyé par visual studio :

Error 1 error C2679: binary '<' : no operator found which takes a right-hand operand of type 'Point<T>' (or there is no acceptable conversion)



Merci beaucoup de votre aide
++
Ben
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Dernière intervention
5 octobre 2006
3
Merci
Salut,

tu as le droit de faire

std::cout << (3 < 5 );

à cause des priorités des opérateurs, sinon c'est évalué
comme ça : (std::cout << 3 ) <5;

Ma participation à la saturation du net:
http://hylvenir.free.fr

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Hylvenir
Messages postés
96
Date d'inscription
vendredi 17 décembre 2004
Dernière intervention
13 juillet 2007
0
Merci
Au fait, oubliez le HACK dans la méthode de comparaison, il est dû à un copier-coller trop large ! :p
Commenter la réponse de benjiiim94
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Dernière intervention
3 juillet 2006
0
Merci
Il manque un <

std::cout << p << p2;
Commenter la réponse de ymca2003
Messages postés
96
Date d'inscription
vendredi 17 décembre 2004
Dernière intervention
13 juillet 2007
0
Merci
En plus des multiples erreurs de copier/coller qui font que mon premier post est incohérent... (vraiment désolé...)
L'erreur ne vient pas du fait que j'utilise une classe template mais que l'on a pas droit de faire quelquechose du style :

std::cout << 3<5;

pour afficher le résultat d'un test. (je croyais que ca renvoyait simplement un booléen, mais il doit y avoir quelquechose d'autre là dessous...)

si je fais

if (p < p2)
{
std::cout << "inferieur";
}else
{
std::cout << "pas inferieur";
}

il n'y a pas de soucis.

Merci de ton aide, tu m'as fais faire (involontairement ? ;) ) les bons tests ! :p
Commenter la réponse de benjiiim94

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.