使用类模板和重载/运算符

时间:2012-04-02 09:45:11

标签: c++ class templates overloading

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); 

我的声明是在类模板和外部声明的旁边,但在同一名称空间内。如果您需要整个代码,请告诉我。谢谢。

2 个答案:

答案 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)
{
    // ...
}

可编辑的例子:

Ideone

然后,再次从operator/单独返回模板参数可能不是您想要的,您希望返回一个类实例。所以我认为你真正需要的是:

template<class T>
complex<T> complex<T>::operator/(const complex<T>& c)
{
    // ...
}