gpt4 book ai didi

c++ - 二进制 * 运算符未找到

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:03 26 4
gpt4 key购买 nike

我有一个带有适当重载的 Vect*float 运算符的 vector 类,我正在尝试创建全局/非成员 float*Vect 运算符,如下所示:(注意这是一个经过大量编辑的示例)

class Vect
{
public:
Vect::Vect(const float p_x, const float p_y, const float p_z, const float p_w);
Vect operator*(const float p_sclr) const;
private:
float x;
float y;
float z;
float w;
};
Vect::Vect(const float p_x, const float p_y, const float p_z, const float p_w) {
x = p_x;
y = p_y;
z = p_z;
w = p_w;
}
Vect Vect::operator*(const float p_sclr) const {
return Vect( (x * p_sclr), (y * p_sclr), (z * p_sclr), 1); // reset w to 1
}
//Problem Non-MemberOperator
Vect operator*(const float p_sclr, const Vect& p_vect);
Vect operator*(const float p_sclr, const Vect& p_vect) {
return p_vect * p_sclr;
}

但是当我去测试电话接线员时:

Vect A(2.0f, 3.0f, 4.0f, 5.0f);
float s = 5.0f;
Vect C, D;
C = A * s; // Fine
D = s * A; // Error as below

我收到以下编译错误:

错误 C2678:二进制“*”:未找到采用“float”类型左侧操作数的运算符(或没有可接受的转换)

任何人都可以深入了解为什么会发生这种情况吗? MS 文档位于 http://msdn.microsoft.com/en-us/library/ys0bw32s(v=VS.90).aspx。并且对 Visual Studio 2008 不是很有帮助。这是我收到的唯一编译错误或警告。

最佳答案

您还没有发布完整 示例。我可以毫无问题地编译以下代码:

class vect
{
float coeffs[4];
public:
vect()
{
for (int k=0; k<4; ++k)
coeffs[k] = 0;
}

vect(float x, float y, float z, float w)
{
coeffs[0] = x;
coeffs[1] = y;
coeffs[2] = z;
coeffs[3] = w;
}

vect operator*(float scalar) const
{
return vect(
scalar*coeffs[0],
scalar*coeffs[1],
scalar*coeffs[2],
scalar*coeffs[3] );
}
};

vect operator*(float scalar, vect const& x)
{
return x*scalar;
}

void test()
{
vect a (2,3,4,5);
float s = 5;
vect c, d;
c = a * s;
d = s * a;
}

所以,问题一定出在其他地方。

关于c++ - 二进制 * 运算符未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com