You need to enable JavaScript to run this app. C++自定义Ftr类使用*=运算符报无匹配操作数错误的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

C++自定义Ftr类使用*=运算符报无匹配操作数错误的解决方法

编译错误原因
  • 报错触发位置:输出乘法结果语句中的(comp19 *= comp20)代码段
  • 核心不匹配原因:现有Ftr类的重载*=运算符仅接受double类型作为右操作数,传入的comp20是Ftr类型,无对应匹配的重载版本
  • 对比+=可正常运行的原因:现有operator+=的形参为const Ftr&,可直接匹配传入的Ftr类型实参,无需额外转换
  • 约束限制:不得修改现有operator*=(const double& rhs)的形参定义
实现目标运算的方案

利用类已有的公共接口完成类型适配,无需修改现有*=定义,步骤如下:

  1. 通过Ftr类的公共getNum()接口,取出右操作数Ftr对象内部的double类型数值
  2. 直接将该double值传入现有*=运算符执行运算
  3. 输出运算结果时同样通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 05:24:10