2016-04-03 13 views
2

以下のコードでは、演算子にintをオーバーロードしようとしています。私のプログラムでint A= &dステートメントをサポートできるように。プリミティブデータ型のオーバーライド

class Data{ 
public: 
    int a; 
    Data(int A): a(A) {} 
    operator int() {return a;} 
}; 

int operator=(int &lhs, Data* rhs){ 
    lhs = rhs->a; 
    return lhs; 
} 

int main(){ 
    Data d(10); 
    int A = &d; 
    return 0; 
} 

しかし、時間のコンパイルエラー与えている:

error: ‘int operator=(int&, Data*)’ must be a nonstatic member function int operator=(int &lhs, Data* rhs){
test1.cpp: In function ‘int main()’:
test1.cpp: error: invalid conversion from ‘Data*’ to ‘int’ [-fpermissive] int A = &d;

私にオペレータをオーバーロードの正しい方法を提案してください。

答えて

2

intに割り当てをオーバーロードすることはできません。コンパイラから指示されるように、operator=は、クラスの非静的メンバー関数、ストーリーの終わりでなければなりません。

あなたのクラスには既にintへの変換がありますので、int A = d;と書くことができます。

0

クラスに代入演算子(operator=)のオーバーロードは必要ありません。さらに、2つの引数を取ることはできません。

キャストオペレーター(operator int() {return a;})とint A = d;のような適切な割り当てが必要です。 &dの前に書き込むときは、がシステムにポインターを格納するのに十分な大きさであれば、のアドレスをAに設定します。

関連する問題