C++自定义Ftr类使用*=运算符报无匹配操作数错误的解决方法
编译错误原因
- 报错触发位置:输出乘法结果语句中的
(comp19 *= comp20)代码段 - 核心不匹配原因:现有
Ftr类的重载*=运算符仅接受double类型作为右操作数,传入的comp20是Ftr类型,无对应匹配的重载版本 - 对比
+=可正常运行的原因:现有operator+=的形参为const Ftr&,可直接匹配传入的Ftr类型实参,无需额外转换 - 约束限制:不得修改现有
operator*=(const double& rhs)的形参定义
实现目标运算的方案
利用类已有的公共接口完成类型适配,无需修改现有*=定义,步骤如下:
- 通过
Ftr类的公共getNum()接口,取出右操作数Ftr对象内部的double类型数值 - 直接将该
double值传入现有*=运算符执行运算 - 输出运算结果时同样通过
getNum()接口获取数值,避免无对应operator<<重载导致的二次编译错误
修改后的乘法测试代码示例
替换MainProject.cpp中原错误的乘法测试段:
// Multiplication operator Ftr comp19(9); Ftr comp20(7); // 传入comp20的数值,适配现有*=的double形参要求 comp19 *= comp20.getNum(); // 输出运算结果 std::cout << comp19.getNum() << " *= " << comp20.getNum() << " = " << comp19.getNum() << "\n";
现有代码的额外问题提示
若要保证运算结果准确,还需补全两处缺失实现:
Ftr的构造函数当前未给私有成员m_Num赋值,需修改为初始化列表赋值:
Ftr::Ftr(double Ftr) noexcept : m_Num(Ftr) {}
Ftr.h中声明的operator+=(const Ftr& rhs)未在Ftr.cpp中实现,运行加法测试前需补充对应逻辑。
内容的提问来源于stack exchange,提问作者Lunden
相关产品推荐
相关产品推荐

