operator en C++

Iniciado por mapers, 26 Enero 2011, 04:35 AM

0 Miembros y 1 Visitante están viendo este tema.

mapers

buenas señores necesito de su ayuda  e declarado una funcion  con el operator
Código (cpp) [Seleccionar]


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Vector2D 
{
public: //atributos
float x;
float y;
public: //métodos
Vector2D(float xv=0.0f,float yv=0.0f);
virtual ~Vector2D();

float modulo(); //modulo del vector
float argumento(); //argumento del vector
Vector2D Unitario(); //devuelve un vector unitario
Vector2D operator - (Vector2D &);//resta de vectores
Vector2D operator + (Vector2D &);//suma de vectores
float operator *(Vector2D &); //producto escalar
Vector2D operator *(float); //producto por un escalar
};

#endif // !defined(AFX_VECTOR2D_H__86ED85F9_9ED7_4672_9273_C1BB38271909__INCLUDED_)


Código (cpp) [Seleccionar]

// Vector2D.cpp: implementation of the Vector2D class.
//
//////////////////////////////////////////////////////////////////////

#include "Vector2D.h"
#include <math.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Vector2D::Vector2D(float xv,float yv)
{
x=xv;
y=yv;
}

Vector2D::~Vector2D()
{

}
float Vector2D::modulo()
{
return (float)sqrt(x*x+y*y);
}
float Vector2D::argumento()
{
return (float)atan2(y,x);
}

Vector2D Vector2D::operator - (Vector2D &v)
{
Vector2D res;
res.x=x-v.x;
res.y=y-v.y;
return res;
}
Vector2D Vector2D::operator + (Vector2D &v)
{
Vector2D res;
res.x=x+v.x;
res.y=y+v.y;
return res;
}
float Vector2D::operator *(Vector2D &v)
{
return x*v.x+y*v.y;
}
Vector2D Vector2D::operator *(float f)
{
Vector2D res;
res.x=x*f;
res.y=y*f;
return res;
}
Vector2D Vector2D::Unitario()
{
Vector2D retorno(x,y);
float mod=modulo();
if(mod>0.00001)
{
retorno.x/=mod;
retorno.y/=mod;
}
return retorno;
}



pero de alguna manera al llamarla
Código (cpp) [Seleccionar]

// Bonus.cpp: implementation of the Bonus class.
//
//////////////////////////////////////////////////////////////////////

#include "Bonus.h"
#include <GL/glut.h>
#include <stdlib.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Bonus::Bonus()
{
//movimiento gravitatorio
//velocidad vertical inicial
aceleracion.y=-9.8;
velocidad.y=5;
lado=0.5f;
}

Bonus::~Bonus()
{

}

void Bonus::Dibuja()
{
glPushMatrix();
glTranslatef(posicion.x,posicion.y,0);
glRotatef(30,1,1,1);
glColor3f( rand()/(float)RAND_MAX,
rand()/(float)RAND_MAX,
rand()/(float)RAND_MAX);//color aleatorio
    glutSolidCube(lado);
glPopMatrix();
}


void Bonus::Mueve(float t)
{
posicion=posicion+ velocidad*t+ aceleracion*(0.5f*t*t);
velocidad=velocidad+aceleracion*t;
}

void Bonus::SetPos(float ix, float iy)
{
posicion.x=ix;
posicion.y=iy;
}



me tira este error :

49 C:\Proyectos DEV C++\pang\Bonus.cpp no match for 'operator+' in '((Bonus*)this)->Bonus::posicion + Vector2D::operator*(float)(t)'

a que se deve estoy haciendo algo mal ..............................

Foxy Rider

Fijate, no veo la declaracion de Bonus, pero en el operator + solo indicaste para sumar dos Vector2D, pero no un Vector2D con un float  (como tira el error en Bonus.cpp) .. así que toca declarar e implementar el operador sobrecargado para un float ..

Código (cpp) [Seleccionar]
Vector2D operator + (float );

Saludos

P.S: no se si querrás ser "cross-platform" con OpenGL, pero te comento que hay cosas como ese pragma once que no son portables ..

mapers

holas men  ya lo coloque pero me sigue tirando ese mismo error .............mira
Código (cpp) [Seleccionar]

#pragma once
#endif // _MSC_VER > 1000

class Vector2D 
{
public: //atributos
float x;
float y;
public: //métodos
Vector2D(float xv=0.0f,float yv=0.0f);
virtual ~Vector2D();

float modulo(); //modulo del vector
float argumento(); //argumento del vector
Vector2D Unitario(); //devuelve un vector unitario
Vector2D operator - (Vector2D &);//resta de vectores
Vector2D operator + (float );
Vector2D operator + (Vector2D &);//suma de vectores

float operator *(Vector2D &); //producto escalar
Vector2D operator *(float); //producto por un escalar
};

#endif // !defined(AFX_VECTOR2D_H__86ED85F9_9ED7_4672_9273_C1BB38271909__INCLUDED_)


ya lo declare como me dijistes pero me sigue saliendo el mismo error  a que se deve ..................... otra pregunta que es "cross-platform" en Opengl .estoy  interesado ............. weno pero primero ayudenme a compilar mi proyecto ,................