我想定义一个四维向量,在最后对运算符+的实现出现了问题,代码如下:
#pragma once
#include <stdexcept>
#include <intrin.h>
#include "Preprocessor.h"
class Vector4
{
public:
Vector4(float vx, float vy, float vz, float vw);
Vector4();
Vector4(float vx, float vy, float vz);
__forceinline explicit Vector4(__m128 m) :Vector4(m.m128_f32[0], m.m128_f32[1], m.m128_f32[2], m.m128_f32[3]) {}
Vector4 operator+(const Vector4& right)const;
Vector4 operator-(const Vector4& right)const;
Vector4 operator*(float right)const;
Vector4 operator/(float right)const;
float SquareMagnitude();
float Magnitude();
Vector4& Normalize();
float static Dot(const Vector4& left, const Vector4& right);
float Dot(const Vector4& right);
Vector4 static Cross(const Vector4& left, const Vector4& right);
Vector4 static Lerp(const Vector4& left, const Vector4& right, float t);
void standardization()
{
if (w == 0)
{
//std::cout << "error w==0" << std::endl;
return;
}
x /= w;
y /= w;
z /= w;
w = 1;
}
void Print();
__m128 getM128()
{
return _mm_set_ps(x, y, z, w);
}
__forceinline float& operator[](int index);
private:
float x, y, z, w;
};
Vector4::Vector4(float vx, float vy, float vz, float vw) :x(vx), y(vy), z(vz), w(vw) {}
Vector4::Vector4() : Vector4(0, 0, 0, 1) {}
Vector4::Vector4(float vx, float vy, float vz) :Vector4(vx, vy, vz, 1) {}
// 报错,无法访问this中的getM128函数,right更是什么成员都访问不到
Vector4 Vector4::operator+(const Vector4& right)const
{
return Vector4(_mm_add_ps(this.getM128(), right.getM128()));
}
报错: