我用以下重载运算符创建了一个自定义可变长度向量类Vec
:
float& operator[](int i);
Vec& operator+=(Vec& rhs);
Vec operator+(Vec& rhs);
Vec& operator-=(Vec& rhs);
Vec operator-(Vec& rhs);
Vec& operator*=(float rhs);
Vec operator*(float rhs);
Vec& operator/=(float rhs);
Vec operator/(float rhs);
这些重载可以很好地工作,并且我可以得到正确的结果,但是当我尝试链接它们时,会出现template argument deduction/substitution failed
的编译错误。有谁知道为什么吗?
这有效:
Vec multiplier = d * time;
Vec collision = e + multiplier;
此操作失败:
Vec collision = e + (d * time);
e和d的类型为Vec
,时间的类型为float
答案 0 :(得分:0)
问题是您已声明函数使用Vec &rhs
参数而不是const Vec &rhs
。缺少const
意味着您只能将引用传递给真实的(命名的)对象。您不能传递对未命名临时对象的引用。
当您“链接”操作时,内部操作的结果将是一个未命名的临时操作,然后该临时操作将无法传递给外部操作,因此您会遇到重载解析失败(这表示为模板替换失败,因为类显然实际上是模板)