2014-10-13 5 views
2

내 코드베이스에서 std :: mutex를 광범위하게 사용했습니다. 그러나 클래스 중 하나는 단순히 인스턴스 변수 목록에 뮤텍스를 추가 할 수 없습니다. 다음을 사용하여 뮤텍스를 인스턴스화합니다. -std :: mutex를 인스턴스화 할 때 컴파일러 오류가 발생했습니다.

std::mutex myMutex; 

클래스의 멤버 목록의 private 섹션에 위 문장을 추가했습니다. 내가 뮤텍스를 추가하려고 클래스가 복사됩니다

error C2280: 'std::mutex::mutex(const std::mutex &)' : attempting to reference a deleted function 
1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\mutex(113) : see declaration of 'std::mutex::mutex' 

-

나는 다음과 같은 오류가 발생합니다.

내가 말했듯이, 나는 내 코드베이스 전체에 뮤텍스를 사용했다. 그래서 다른 곳에서 인스턴스를 생성 할 수있는 동안 뮤텍스를 한 곳에서 인스턴스화 할 수 없다는 것은 매우 이상하다. 여기서 뭐가 잘못 됐는지 말해 줄 수 있니?

+0

'변경 가능'이 누락 되었습니까? –

+0

더 많은 코드가 필요합니다. – James

+0

@ πάνταῥεῖ, 필요합니까? 어쨌든, 나는 그것을 변경할 수 있도록 노력하고 컴파일러는 여전히 동일한 오류를 throw합니다. –

답변

4

복사 생성자가있는 클래스에 std::mutex을 추가하고 있습니다. 대부분의 경우, 클래스에는 사용되는 기본 복사 생성자가 있습니다. 기본 복사 생성자는 클래스의 각 멤버에 대해 복사 생성자를 호출합니다. 그러나 std::mutex의 복사 생성자는 복사 할 수없는 유형의 spec에 의해 삭제됩니다.