On 9/20/07, personaje <[EMAIL PROTECTED]> wrote:
> On 9/19/07, Francisco Dibar <[EMAIL PROTECTED]> wrote:
>
> > y fijate si tu mensaje de error es el mismo.
> >
>
> claro, lo saqué de mi proyecto y no me da error (como a Uds), pero
> encontré la vuelta: TPoint está en un .h que se incluye más de una vez
> en distintos .cpp
>
> El código es el siguiente:
>
> ----------------8<----------------8<----------------8<----------------8<----------------8<----------------
> #ifndef ATTRIBUTES_H_
> #define ATTRIBUTES_H_
>
> #include <vector>
> #include <string>
> #include <math.h>
>
> //! Template para definir coordenadas de imagen
> /**
> * Es un template que define una coordenada en el plano 2D.
> */
> template <class T>
> class TPoint
> {
> public:
> //! Constructor
> TPoint(T X=0,T Y=0):x_(X),y_(Y){};
> //! Operador de copia que acepta cualquier TPoint y castea al dato propio
> template <class T2>
> TPoint(const TPoint<T2> &Point)
>
> {x_=static_cast<T>(Point.GetX());y_=static_cast<T>(Point.GetY());};
> //! Acceso a X
> T GetX()const{return x_;}
> //! Acceso a Y
> T GetY()const{return y_;}
> //! Modificacion de X
> void SetX(T x){x_=x;}
> //! Modificacion de Y
> void SetY(T y){y_=y;}
> private:
> T x_; ///< Coordenada X
> T y_; ///< Coordenada Y
> };
>
> // Operador == para el TPoint
> template <class T1,class T2>
> bool operator==(TPoint<T1> PointA,TPoint<T2> PointB)
> {
> return ((PointA.GetX()==PointB.GetX()) &&
> (PointA.GetY()==PointB.GetY()));
> }
>
> #define EPSILON 0.000000001
>
> // Operador == para el TPoint especializado en RealPoint
> template <>
> bool operator==(TPoint<double> PointA,TPoint<double> PointB)
> {
> if ( fabs(PointA.GetX()-PointB.GetX())<EPSILON &&
> fabs(PointA.GetY()-PointB.GetY())<EPSILON )
> return true;
> return false;
> }
>
> // Operador != para el TPoint
> template <class T1,class T2>
> bool operator!=(TPoint<T1> PointA,TPoint<T2> PointB)
> {
> return !(PointA==PointB);
> }
> ----------------8<----------------8<----------------8<----------------8<----------------8<----------------
>
> que anda para el caso de 1 .cpp que lo incluya, pero no para el caso
> de 2 o más... acá es donde demuestro mi incompetencia... por qué pasa?
>
me olvidé del error :
second.o: In function `bool operator==<double, double>(TPoint<double>,
TPoint<double>)':
second.cpp:(.text+0xa): multiple definition of `bool
operator==<double, double>(TPoint<double>, TPoint<double>)'
Saludos
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion