Heloo,我在模板类中的成员函数中重载/运算符时遇到了问题。我得到错误'错误C2805:二进制'运算符/'参数太少'但我想我给操作员足够的参数。这是我的头文件代码的一部分
template <class T>
typename complex<T>::complex operator/(complex<T> &c)
{
complex temp;
temp.re = (re*c.getRe() + im*c.getIm())/(pow(c.getRe(),2)+pow(c.getIm(),2));
temp.im = (im*c.getRe() - re*c.getIm())/(pow(c.getRe(),2)+pow(c.getIm(),2));
return temp;
}
我的功能声明如下:
T operator/(complex<T> &c);
我的声明是在类模板和外部声明的旁边,但在同一名称空间内。如果您需要整个代码,请告诉我。谢谢。
答案 0 :(得分:0)
您在运算符定义中缺少类前缀:
complex<T>::operator /(complex<T> &c)
另外,您将运算符声明为返回T
- 为什么要在定义中返回complex
?
答案 1 :(得分:0)
你声明一个新的自由函数,而不是你在类定义中声明的函数。
template <class T>
typename complex<T>::complex operator/(complex<T> &c)
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
return type function name
你可以看到你在那里缺少的东西 - 范围解决方案。您只能将二元运算符重载为自由函数,因此会出现编译错误。
这符合您的课堂声明:
template<class T>
T complex<T>::operator/(complex<T>& c)
{
// ...
}
可编辑的例子:
然后,再次从operator/
单独返回模板参数可能不是您想要的,您希望返回一个类实例。所以我认为你真正需要的是:
template<class T>
complex<T> complex<T>::operator/(const complex<T>& c)
{
// ...
}