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

Responder a