2016-10-29 5 views
0

代入演算子をオーバーロードしようとしていますが、動作しないようです。 The code is based on this answer。代入演算子のオーバーロードに関する他の例を探しましたが、コードが実行されないようには見えません。C++ - 代入演算子をオーバーロードできません

これは私のコードです:

#pragma once 

#include <assert.h> 

class ReadOnlyInt 
{ 
public: 
    ReadOnlyInt(): assigned(false) {} 

    ReadOnlyInt& operator=(int v); 
    operator int() const ; 
private: 
    int value; 
    bool assigned; 
}; 

ReadOnlyInt& ReadOnlyInt::operator=(int v) 
{ 
    assert(!assigned); 
    value = v; 
    assigned = true; 
    return *this; 
} 

ReadOnlyInt::operator int() const 
{ 
    assert(assigned); 
    return value; 
} 

インテリセンスは、すべての警告を与えるものではありませんが、operator=をキーワードとしてハイライトされていません。

私はassigmentを作る場合は、インテリセンスはそれは不可能です認識しない今:

ReadOnlyInt bar = 12; 

もし適切なコンストラクタは "int型" から "ReadOnlyInt" に変換するために存在しない

をしかしこれは動作します:

int foo = bar; 

解決策

この質問は重複としてマークされているため、私はそれに答えることはできません。これは私がこの質問に関するコメントと回答に基づいて思いついた解決策でした:

ReadOnlyInt::ReadOnlyInt() 
: assigned(false) 
{} 

ReadOnlyInt::ReadOnlyInt(int v) 
: value(v), assigned(true) 
{} 
+0

'ReadOnlyInt bar'を実行してから' bar = 12; 'を割り当てると動作しますか? –

+1

' ReadOnlyInt bar = 12; 'は割り当てを行いません。それはコピーの初期化です。代入を使用するには、オブジェクトを作成し、**個別に**割り当てます: 'ReadOnlyInt bar;バー= 12; '。 –

答えて

1

同時に初期化して宣言することはできません。あなたはint引数を取るReadOnlyIntための適切なコンストラクタが存在しないためです。この

ReadOnlyInt bar; 
bar = 12; 

を行う必要があります。

関連する問題