Использование шаблона класса и перегрузка / операторы - PullRequest
0 голосов
/ 02 апреля 2012

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 голосов
/ 02 апреля 2012

Вы объявили новую свободную функцию, а не ту, которую вы объявили в определении класса.

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)
{
    // ...
}
0 голосов
/ 02 апреля 2012

В определении оператора отсутствует префикс класса:

complex<T>::operator /(complex<T> &c)

Кроме того, вы объявили, что оператор возвращает T - почему вы возвращаете complex в определении?

...