You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++模板类重载+运算符遇指针报错:Invalid operands to binary expression

错误原因分析

你遇到的错误核心是操作数类型不匹配:

  • 你为SomeClass<T>类重载的operator+,作用对象是SomeClass<T>类型的实例;
  • 但obj1和obj2是SomeClass<int>*类型的指针(本质是存储内存地址的整数),C++语言本身没有定义两个指针之间的加法运算,因为内存地址相加没有实际逻辑意义,因此编译器抛出Invalid operands to binary expression错误。

关键差异对比

  • 当你直接实例化对象(非指针)时,obj1 + obj2会触发你重载的成员运算符,因为两个操作数都是SomeClass<T>对象;
  • 用指针时,obj1和obj2代表的是对象的内存地址,不是对象本身,自然无法调用针对对象的重载运算符。

满足指针要求的解决方法

要让指针指向的对象执行加法,必须先解引用指针获取实际对象,再调用重载运算符:

int main() {
    SomeClass<int>* obj1 = new SomeClass<int>(5);
    SomeClass<int>* obj2 = new SomeClass<int>(7);

    // 解引用指针得到对象,执行加法后分配内存存储结果
    SomeClass<int>* result = new SomeClass<int>(*obj1 + *obj2);

    // 记得手动释放内存避免泄漏
    delete obj1;
    delete obj2;
    delete result;

    return 0;
}

内容的提问来源于stack exchange,提问作者Serhii Chernikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:55:22