2012-07-04 5 views
2

Я завораживаю с помощью определяющих функций оператора друга. Мой код выглядит следующим образом:C++ Использование ключевого слова оператора с шаблоном?

template <typename typ> 
    class VecClass 
    { 
    public: 
     VecClass(); 
     /* other class definitions */ 
     friend void operator+(VecClass op1,VecClass op2); 
    } 

    template <typename typ> 
    void VecClass<typ>::operator+(VecClass<typ> &op1,VecClass<typ> &op2) 
    { 
     /* do some stuff on op1 and op2 in here */ 
    } 

где VecClass является классом для создания векторов и выполнять различные функции на этих векторах (нотабене я упростил код, чтобы попробовать и быть как можно более четкими). При компиляции, используя

int main() 
    { 
     VecClass=a,b; 
     a+b; 
     return 0; 
    } 

Я получаю следующую ошибку компиляции

 error C2039: '+' : is not a member of 'VecClass<typ>' 

Я явно не хватает что-то и был бы признателен за любые предложения. Thanx.

+4

'friend' функция не является функцией-членом. – chris

ответ

6

Вы объявили друг оператора, не являющегося членом класса, так что удалить VecClass<typ>::

template <typename typ> 
void operator+(VecClass<typ> &op1,VecClass<typ> &op2) 
{ 
     /* do some stuff on op1 and op2 in here */ 
} 
+2

Или вы также можете удалить ключевое слово 'friend'. – SingerOfTheFall

+1

В любом случае обратите внимание, что подписи не совпадают: объявление друга принимает объекты, определение шаблона принимает ссылки. –

+2

@ChristianStieber: Действительно. И лучший выбор - ни один из них; это ссылка на const. –

Смежные вопросы