Acabo de instalar el VStudio 2003 y al compilar el proyecto me aparece un error que antes no me aparecía. La verdad es que para mi es un error del compilador...
camara.MoverOrigen(camara.m_Up*-(float)incy*incshift);
error C2664: 'void CXCamara::MoverOrigen(CXVector &)' : no se puede convertir el parámetro 1 de 'D3DXVECTOR3' a 'CXVector &'
Aquí está la clase CXVector
class CXVector:public D3DXVECTOR3 {
public:
CXVector() {};
CXVector(float xyz) { x=xyz;y=xyz;z=xyz; };
CXVector(const CXVector &origen);
CXVector(float x,float y,float z);
CXVector &Normalizar();
CXVector NormalizarNuevo();
float ProductoEscalar(const CXVector &v);
CXVector ProductoVectorial(const CXVector &v1);
float Magnitud();
void ResetAlMaximo(); // Asigna un nº máximo
DWORD ConvertirA_RGBA(float fHeight);
CXVector &operator /(float escalar);
CXVector &operator *=(const CXMatriz &m);
friend CXVector operator *(const CXVector &v,const CXMatriz &m);
friend CXVector operator -(CXVector &a,CXVector &b);
friend CXVector operator -(CXVector &a);
friend CXVector operator +(CXVector &a,CXVector &b);
friend CXVector operator *(CXVector &a,float escalar);
friend CXVector operator *(float escalar,CXVector &a);
};
la funcion de la clase CXCamara
void EstablecerOrigen(CXVector &From);
Como podeis ver, multiplicar el vector camara.m_Up*float devuelve un objeto CXVector!! No sé porque porras me aparece este error, además que siempre había funcionado!!!
¿Alguien puede ayudarme?
Hola!
incshift que es? Un escalar? Si es asi, no tienes definida esa operacion en tu clase. Estara utilizando:
operator * ( float s )
Y esta funcion la tiene la clase D3DXVECTOR, la cual devuelve un D3DXVECTOR y no puede convertirlo.
Espero que sea eso.
Un saludote!!
Si es un escalar, pero quedaría así:
camara.m_Up*-(float)incy*incshift
-(float)incy*incshift=float
camara.m_Up=CXVector
Queda: CXVector*escalar
y eso sí está definido como un friend
:huh:
¿nadie puede ayudarme?
Ya lo he resuelto, tenía que poner const!!!
Se ve que el nuevo VStudoi es "muy quisquilloso"
No es ke el neuvo visuals ea muy kiskilloso, sino ke los anteriores lo eran poco. A mi me ha dado errores similares portando mi engine a linux y compilando con el gcc.
Donde tenias que poner el const? Me has picao :b
friend CXVector operator *(const CXVector &a,float escalar);
Cuando pases un objeto como parámetro de entrada, que sea siempre una referencia constante. (Siempre que sea un parámetro obligatorio, si es opcional un puntero para poder pasar NULL)