2011-06-27 11 views
1

可能性の重複:
What does “operator = must be a non-static member” mean? (C++)C++演算子非静的メンバ関数でなければなりません

私はこのような2つの引数で、非会員として演算子=メソッドを記述しようとしています:

template<class T> 
T operator=(T & t, const myclass<T>& m) 
{ 
    t = m.val; 
    return t; 
} 

しかし、operator =が非静的メンバーである必要があるというエラーが表示されます。コンパイラフラグや、これを実行させるためにコンパイラを騙す方法がありますか?

おかげ

+0

一部の演算子は、言語が必要とするだけでメンバである必要があります。詳細については、[このFAQのエントリ](http://stackoverflow.com/questions/4421706/operator-overloading/4421729#4421729)を参照してください。 – sbi

答えて

2

ありませんがない、これは標準で義務付けられている、段落13.5.3.1:

代入演算子は正確に一つで非静的メンバ 機能によって実装 しなければなりませんパラメータ。

0

割り当て演算子はメンバーとして宣言する必要があります(基本的な型またはライブラリ型の代入をオーバーライドしないようにするための根拠はiircです)。

+0

その根拠はちょっと変わったようです。 operator + =などは、非メンバ関数としてオーバーロードすることができます。それは、クラス内の変数の可視性と関係があるようです(静的でなければならないため)。 – jadams

関連する問題