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
相关产品推荐
相关产品推荐

