C++自定义Vektor类sub方法报错:无法将Vektor*转换为Vektor
解决你的Vektor类减法方法编译错误问题
嘿,我来帮你搞定这个编译错误!
首先咱们先搞清楚报错的根源:你在sub方法里用了new Vektor(...),但new关键字在C++里会返回一个指向新创建对象的指针(也就是Vektor*类型),可你的函数声明是要返回Vektor类型——一个实实在在的对象,不是指针。编译器当然没法把指针类型转换成普通的对象类型,这就是那句conversion from 'Vektor*' to non scalar type 'Vektor' requested错误的由来。
你疑惑的“为什么不能用值减去引用指向的值”其实完全没问题——input.x的写法是对的,引用就是用来直接访问对象成员的,问题出在你创建返回结果的方式上,和引用本身无关。
那怎么修正呢?有两种简单又靠谱的方式:
方式1:创建局部对象返回
直接去掉new,创建一个局部的Vektor对象,然后返回它:
Vektor Vektor::sub(const Vektor& input) const { Vektor subresult(x - input.x, y - input.y, z - input.z); return subresult; }
C++会自动处理局部对象的返回(现在的编译器大多会做返回值优化,不会产生额外的拷贝开销)。
方式2:直接返回临时对象(更简洁高效)
你甚至可以不用显式创建局部变量,直接返回一个临时的Vektor对象:
Vektor Vektor::sub(const Vektor& input) const { return Vektor(x - input.x, y - input.y, z - input.z); }
这种写法更紧凑,而且效率和方式1一样,推荐用这种。
另外给你这个Stack Overflow新手提两个小建议:
- 提问时最好附上
Vektor类的完整定义(比如成员变量x、y、z的声明),这样别人能更快确认问题; - 把完整的编译错误信息(包括对应的代码行号)贴出来,也能帮助大家更精准地定位问题。
内容的提问来源于stack exchange,提问作者user9775960
相关产品推荐
相关产品推荐

