Я изучаю, как использовать шаблоны и как перегружать операторы. Мне удалось перегрузить operator[]
, но я столкнулся с проблемой перегрузки operator+
и operator=
. Вот мой код:Перегрузка операторов '=' и '+'
template <class T>
class A
{
public:
//...
friend A<T>& A<T>::operator+ (A<T>&, const A<T>&);
friend A<T>& A<T>::operator= (A<T>&, const A<T>&);
};
template<class T> A<T>& A<T>::operator+ (A<T>& left, const A<T>& right)
{
//some functions
return left;
}
template<class T> A<T>& A<T>::operator= (A<T>& left, const A<T>& right)
{
//some functions
return left;
}
Whenver Я пытаюсь скомпилировать, я получаю эти ошибки:
'+': is not a member of 'A<T>'
'=': is not a member of 'A<T>'
'operator =' must be a non-static member
Что я делаю неправильно?
EDIT:
мне удалось обновить код:
template <class T>
class A
{
public:
//...
A<T> operator+ (A<T>);
A<T> operator= (A<T>, const A<T>);
};
template<class T> A<T> A<T>::operator+ (A<T> right)
{
//some functions
return *this;
}
template<class T> A<T> operator= (A<T> right)
{
//some functions
return *this;
}
Выглядит как operator+
работ в настоящее время хорошо, но компилятор дает эту ошибку:
'operator=' must be a non static member
Почему это статический член и как его исправить?
Удалить 'A ::' сферы в определениях функций. –
Ах, извините, я забыл. Параметры шаблона не являются «унаследованными» в объявлениях 'friend'.Вы должны объявить их как 'template друг A & operator + (A &, const A &);' –
Уверены ли вы в этом? Я получаю в настоящее время внутренней ошибки компилятора: P Nevermind, теперь он по-прежнему вызывает ошибки в «не является членом»:/ – Executor1909