August 29, 2001
Tilldela det värde som en pekare pekar till på enklast möjliga sätt...
VECTOR Normalize( void ){return this[0]/this->Magnitude();}
då tänkte jag mest:
return this[0]/this->Magnitude();
har provat
return (VECTOR)this/this->Magnitude();
vilket inte funkade....
Jaha...Då var man vid slutet...Vad ska man skriva här da? Inget. Som vanligt.
August 2, 2001
har lite svårt att följa din kod
men om man vill returnera värdet av det som en pekar pekar på så får man avrefera pekaren.
int value() {
int a=10;
int *b;
b=&a;
return *b;}
Skulle returnera värdet 10
Men att avrefera en this pekare känns tämligen meningslöst, eftersom om man gjort ett anrop till objektet så måste man ju redan ha någon referens till objektet ifråga.
[ Detta Inlägg ändrades av: _paul_ den 2001-11-16 17:59 ]
August 2, 2001
On 2001-11-18 19:14, Tjoppen wrote:
Hmmm...return *this / this->Magnitude();
lr?
(Kan inte kolla...Min 1200 @ reparation)
om this / this->Magnitude() resulterar i en minnes address vars värde du vill returnera så gör du *(this / this->Magnitude()) eftersom * har hög prioritet.
Jag tycker dock att division med this pekaren inte borde ge något vettigt värde. Utan jag antar att det du vill göra är att returnera värdet på det som this->Magnitude() anropet returnerar.
i så fall
*(this->Magnitude()) eller om en cast behövs
*((VECTOR*)(this->Magnitude()))
EDIT: Tänkte efter lite, du har nog gjort en operatoröverlagring av / som resulterar i en pekare vars värde ska returneras så du kan glömma den andra delen av detta inlägg.
[ Detta Inlägg ändrades av: _paul_ den 2001-11-18 20:58 ]
August 29, 2001
Nu måste jag förklara lite:
class VECTOR
{
VECTOR Normalize( void )
^^ INTE en pekare
{
return *this
^^ this är, som bekant, VECTOR...exempel följer...
/
^^ VECTOR oprator / ( float a )
this->Magnitude();
^^ float VECTOR::Magnitude()
}
}
VECTOR a = Vector( 0, 0, 4 );
a.Normalize();
a == Vector( 0, 0, 1 );
November 20, 2001
Rimligtvis lagrar du vektorns koordinater i någon eller några privata medlemsvariabler, t.ex. x, y och z eller coords[].
En normalize()-funktion bör rimligtvis se ut ungefär så här (om vi kör med arrayvarianten):
void normalize()
{
for (int i = 0; i < sizeof(coords)/sizeof(double); i++)
coords[i] /= magnitude();
}
Där magnitude() returnerar vektorns norm (magnitud). Obs att sizeof(double) ska ersättas av annat lämpligt uttryck om dina koordinater inte är doubles.
Om du istället vill returnera en ny Vector (snarare än att modifiera den du gör anropet på) kan funktionen istället se ut så här:
Vector normalize() {
return (*this) / magnitude();
}
Förmodligen är det det senare du ursprungligen försökte åstadkomma.
Lycka till!
1 Guest(s)