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

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

Merci Hylvenir 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de Hylvenir
benjiiim94 96 Messages postés vendredi 17 décembre 2004Date d'inscription 13 juillet 2007 Dernière intervention - 13 mai 2006 à 15:02
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
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 13 mai 2006 à 16:09
0
Merci
Il manque un <

std::cout << p << p2;
Commenter la réponse de ymca2003
benjiiim94 96 Messages postés vendredi 17 décembre 2004Date d'inscription 13 juillet 2007 Dernière intervention - 13 mai 2006 à 16:54
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.