2013-02-11 3 views
0

내 문제는 다음과 같습니다.휘발성 정적 멤버 초기화가 왜 재정의 컴파일 오류를 생성합니까?

정적 카운터가있는 클래스가 있습니다. 이 변수를 멀티 스레드 환경에서 사용하기 때문에이 카운터를 휘발성으로 설정했습니다. CPP 파일에서

class.h

class myClass 
{ 
public: 
volatile static int mCounter; 
(...) 
}; 

class.cpp

int myclass::mCounter = 0; 

, 나는 그것을 초기화, 나는 다음과 같은 컴파일 오류 얻을 :

'mCounter' : redefinition; different type modifiers 

왜?

미리 감사드립니다.

+3

'휘발성'은 동시성과 관련하여 ** 아무 것도 ** 없습니다. 프로그램이 잘못되었을 가능성이 큽니다. –

+0

각 프로세서마다 전용 캐시가 있습니다. 휘발성 워드는 값이 메모리에서 읽히고 이러한 캐시 중 하나가 읽히지 않도록 보장합니까? –

+0

해결하려는 실제 문제는 무엇입니까? 둘 이상의 스레드가'mCounter'를 업데이트합니까? 그렇다면 '휘발성'이상이 필요합니다. –

답변

4

해당 행에서도 "휘발성"을 반복해야합니다.

+4

'int'뿐만 아니라 ...? –

+0

네, int뿐만 아니라. –

+0

감사합니다. Mats, 작동합니다. –