2017-12-14 37 views
0

휘발성 객체에 대한 조언이 필요합니다. 여기휘발성 객체로 선언 할 때 C++에서 연산자를 오버로드하는 방법

class A 
{ 
private: 
volatile unsigned long count; 
public: 

A & operator = (unsigned long number) { count = number; return *this; } 
}; 

나는 내가 컴파일러 오류를 얻을 값을 할당하기 위해 "="연산자를 사용하면 휘발성

volatile A myClass; 

로 선언 된 클래스의 인스턴스를 만들 내 클래스입니다

myClass = 5; 

이 작업을 수행하려면 어떻게 "this"포인터를 캐스팅해야합니까? 아니면 이것도 문제입니까?

+0

변경이 유형의 참조에 'A &'를 '휘발성 A'를 바인딩 " – 0x499602D2

+0

아니는 이미이 오류를 시도 volatile' 한정어를 버립니다. " 또한"number "를 버렸습니다. – user3000289

+2

@ 0x499602D2가 제안한 변경 외에도'volatile A '를 반환해야합니다. –

답변

0

첫 번째 문제는 volatile 포인터, 참조 또는 인스턴스를 사용하여 volatile 멤버 함수를 호출 할 수 없다는 것입니다. 이 작업은 const처럼 작동합니다. 개체가 const이거나 포인터 또는 참조가 const 한정 유형 인 경우에만 const 멤버 함수로 호출 할 수 있습니다. 따라서 반드시 회원님의 기능을 수행해야합니다. volatile.

두 번째 문제

는 멤버 함수가 *thisvolatile A &입니다 의미하는 this 포인터도 volatile 될 것 volatile을 할 것이기 때문에,이다. volatile A &A &에 바인드 할 수 없기 때문에 *thisA & (운영자의 반환 유형)에 바인딩 할 수 없습니다. 다시 말하지만, 이것은 과 같습니다. const A &A &에 바인딩 할 수 없습니다. 해결 방법은 교환 원의 반환 유형을 volatile A &으로 변경하는 것입니다.

당신의 연산자는 다음과 같이한다 : A & 연산자 = (부호 없음 long)`에

volatile A & operator= (unsigned long number) volatile 
{ 
    count = number; 
    return *this; 
}