我正在學習如何使用模板以及如何重載運算符。我設法超載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
我在做什麼錯?
編輯:
我已經成功地更新代碼:
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 &operator +(A &,const A &);' –
您確定嗎?我得到了現在編譯器的內部錯誤:P 沒關係,它現在仍然產生'不成員'的錯誤:/ – Executor1909