Opérateur de comparaison dans une classe générique

Résolu
benjiiim94 Messages postés 96 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 13 juillet 2007 - 13 mai 2006 à 15:01
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre 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

4 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
14 mai 2006 à 01:02
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
3
benjiiim94 Messages postés 96 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 13 juillet 2007
13 mai 2006 à 15:02
Au fait, oubliez le HACK dans la méthode de comparaison, il est dû à un copier-coller trop large ! :p
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mai 2006 à 16:09
Il manque un <

std::cout << p << p2;
0
benjiiim94 Messages postés 96 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 13 juillet 2007
13 mai 2006 à 16:54
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
0
Rejoignez-nous