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

Odpowiedz Nowy wątek
2015-01-18 19:21
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 ;

Pozostało 580 znaków

2015-01-18 19:24
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]; }
  };

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-18 19:32
Szybko poszło - Ola Nordmann 2015-01-18 19:31

Pozostało 580 znaków

2015-01-18 19:52
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-[...]op/ff476388%28v=vs.85%29.aspx .
Teraz dostałem kolejny błąd Unhandled exception at 0x7561C42D (KernelBase.dll) którego nie potrafię rozwiązać. :/

Pozostało 580 znaków

2015-01-18 20:25

Nie musisz:

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

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-18 20:47

Pozostało 580 znaków

2015-01-18 20:52
0

Ok, dzięki wielkie za pomoc. :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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