2016-10-29 2 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=는 키워드로 강조 표시되지 않습니다.

내가의 할당은을 지금, 만약 인텔리가 그것을 인식하지 불가능 해요 :

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; bar = 12;'. –

답변

1

동시에 초기화하고 선언 할 수 없습니다. 당신은 int 인수를 ReadOnlyInt에 대한 적절한 생성자가 없기 때문이다이

ReadOnlyInt bar; 
bar = 12; 

할 필요가있다.