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)
{}
'ReadOnlyInt bar'를 실행하고'bar = 12; '를 지정하면 작동합니까? –
'ReadOnlyInt bar = 12;'는 할당을하지 않습니다; 그것은 복사 초기화입니다. 할당을 사용하려면 객체를 만들고 ** 개별적으로 ** 할당하십시오 :'ReadOnlyInt bar; bar = 12;'. –