gpt4 book ai didi

c++ - 重载运算符时出错 *

转载 作者:行者123 更新时间:2023-11-27 23:28:52 31 4
gpt4 key购买 nike

我对运算符的重载有一点疑问。我有一个名为 AtmospheridData 的类,我在其中定义了运算符 *。

在标题中,我在类中定义了这个方法:

//! Operator * (scalar)
AtmosphericData operator*(const qreal& qrMult) const;

.cpp 文件中的定义如下:

AtmosphericData AtmosphericData::operator*(const qreal& qrMult) const
{
AtmosphericData xResult;

xResult.m_qrTemperature = this->m_qrTemperature * qrMult;
xResult.m_qrPressure = this->m_qrPressure * qrMult;
xResult.m_qrDensity = this->m_qrDensity * qrMult;
xResult.m_qrAbsoluteHumidity = this->m_qrAbsoluteHumidity * qrMult;
xResult.m_qrVisibility = this->m_qrVisibility * qrMult;
xResult.m_qrPrecipitationIndex = this->m_qrPrecipitationIndex * qrMult;
xResult.m_xWind.qrNS = this->m_xWind.qrNS * qrMult;
xResult.m_xWind.qrEW = this->m_xWind.qrEW * qrMult;
xResult.m_xWind.qrVert = this->m_xWind.qrVert * qrMult;

xResult.m_xPrecipitationType = this->m_xPrecipitationType;

return xResult;
}

然后,我在以下表达式中使用该类:

AtmosphericData c2;
AtmosphericData t1;
AtmosphericData t2;
AtmosphericData y0;
AtmosphericData y1;
qreal hx;

/* other code */

c2 = - (3 * (y0 - y1) + (hx * ((2 * t1) + t2))) / (hx * hx);

当我编译时(在 linux 下使用 qmake-gcc)我得到以下错误

error: no match for ‘operator*’ in ‘3 * AtmosphericData::operator-(const AtmosphericData&) const(((const AtmosphericData&)((const AtmosphericData*)(& y1))))’

我似乎对 operator * 声明做错了什么,但我不明白我做错了什么。

谁能告诉我如何纠正这个错误?

感谢您的回复。

最佳答案

C++ 中的算术运算符不会自动交换,因此您的运算符仅在您执行 AtmosphericData * qreal 时启动,但在类型顺序相反时不会启动(这是在3 * (y0 - y1) 表达式)。

您还必须编写一个 operator* 来处理 qreal * AtmosphericData 情况,它必须写成一个自由函数,因为左手操作数的类型是不是你们类(class)的类型。

inline AtmosphericData operator*(const qreal& lhs, const AtmosphericData & rhs)
{
// Just forward to the other operator (this works because I swapped the operands)
return rhs * lhs;
}

顺便说一下,恕我直言,要实现数学运算符,您应该遵循通常的模式,首先实现分配版本 (*=),然后从“正常”(*) 版本;查看operator overloading FAQ了解更多详情。

关于c++ - 重载运算符时出错 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285122/

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