テンプレートの使用方法と演算子のオーバーロード方法を学習しています。私はoperator[]
をオーバーロードすることに成功しましたが、operator+
とoperator=
のオーバーロードに関する問題が発生しました。ここに私のコードは次のとおりです。私がコンパイルしようWhenver演算子の '='と '+'のオーバーロード
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;
}
、私はそれらのエラーを取得:
'+': 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
なぜそれは静的メンバーですか、どのように修正できますか?先発代入演算子のため
関数定義における ' ::'スコープを削除します。
はこれを試してみてください。 –
ああ、申し訳ありません、私は忘れました。テンプレートパラメータは、_ "friend"宣言に継承されません。テンプレート friend A &operator +(A &、const A &); ' –
あなたは本当ですか?私は今コンパイラの内部エラーになっています:P 「メンバーではありません」というエラーは発生しません:/ – Executor1909