Przeciążenie operatora '=' we własnej klasie Vector4D

0

Witam,
mam problem z przeciążeniem operatora '='.

#pragma once
#include <cmath>

class Vector4D
{
public:
	Vector4D(float fX = 0.0f, float fY = 0.0f, float fZ = 0.0f, float fA = 0.0f);
	~Vector4D();

	float length();

	Vector4D operator+(const Vector4D &v) const;
	FLOAT* operator=(const Vector4D &f) const
        {
	        m_pFloat = new FLOAT[4];
	        m_pFloat[0] = f.m_fX;
	        m_pFloat[1] = f.m_fY;
	        m_pFloat[2] = f.m_fZ;
	        m_pFloat[3] = f.m_fA;
	        return this->m_pFloat;
        }
	operator FLOAT*() const { return m_pFloat; }

private:
	FLOAT *m_pFloat;
	float m_fX, m_fY, m_fZ, m_fA;
};
 

Otrzymuję taki błąd:
error C3490: 'm_pFloat' cannot be modified because it is being accessed through a const object
Próbowałem również użycie zmiennej lokalnej w

FLOAT* operator=(const Vector4D &f) const 

, ale nie wiem co mam wtedy zwrócić w operator FLOAT*() const ;

3

FLOAT* operator=(const Vector4D &f) const
Wywal to wszystko i napisz porządnie:

#pragma once
#include <cmath>
 
class Vector4D
  {
   private:
   double tb[4];
   public:
   Vector4D(double a=0,double b=0,double c=0,double d=0) { tb[0]=a; tb[1]=b; tb[2]=c; tb[3]=d; }
   Vector4D(double *ptr) { memcpy(tb,ptr,4*sizeof(double)); }
   ~Vector4D() {}
    double length() { return hypot(hypot(a,b),hypot(c,d)); }
    Vector4D &operator+=(const Vector4D &v) { for(int i=0;i<4;++i) tb[i]+=v.tb[i]; return *this; }
    Vector4D operator+(const Vector4D &v) const { Vector4D tmp(*this); return tmp+=v; }
    //Vector4D &operator=(const Vector4D &f) // sam się napisze
   double &operator[](unsigned axes) { return tb[axes]; }
   const double &operator[](unsigned axes) const { return tb[axes]; }
  };
0

Dzięki, z pewnością kiedyś skorzystam z tego, ale nie w tym przypadku, ponieważ muszę prze konwertować na FLOAT* ze względu na tę funkcję http://msdn.microsoft.com/en-us/library/windows/desktop/ff476388%28v=vs.85%29.aspx .
Teraz dostałem kolejny błąd Unhandled exception at 0x7561C42D (KernelBase.dll) którego nie potrafię rozwiązać. :/

1

Nie musisz:

Vector4D v;
ClearRenderTargetView(pRenderTargetView,&v[0]);

tak a propos czemu nie użyjesz tego: http://www.cplusplus.com/reference/valarray/valarray/?kw=valarray

0

Ok, dzięki wielkie za pomoc. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1