2013-04-30 4 views
0

내 문제는 다음과 같습니다'CObject :: CObject는'클래스에 선언 private 멤버에 액세스 할 수 없습니다 'CObject'

Error 1 error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxwin.h 1991 1 ProcessInfo

그리고 내 코드 :.

boost::thread timerThread(&CMainFunctions::TimerFunction, this, pid, TIMER_INTERVAL_MS, lstBox); 

lstBox는 MFC 목록 상자입니다, 내 TimerFunction입니다 :

void CMainFunctions::TimerFunction(int pid, int interval, CListBox &lstbox) 

내 MFC 양식을 편집하려면, 또는 r ather 내 목록 상자에서 스레드 내 양식 편집?

+2

예를 들면 다음과 같이 목록 상자를 전달해 보았습니까? 'boost :: ref (lstBox)'? –

+0

그게 도움이됩니다. 매우 큰 감사) – EXTRAM

답변

1

boost::thread 생성자에 제공된 인수가 복사됩니다. 연결된 참조 페이지에서 :

마찬가지로 스레드 (boost :: bind (f, a1, a2, ...)). 결과적으로, f와 각 an은 새 스레드가 액세스 할 수 있도록 내부 저장소에 복사됩니다.

컴파일러가 복사 할 수없는 개체를 복사하려고 시도하고 있다고 불평하고 있습니다. 질문에 Joachim Pileborg의 의견에서 제안한대로 boost::ref을 사용하여 복사를 방지하고 대신 인수에 대한 참조를 전달하십시오. 참조로 전달 된 인수는 스레드의 수명 동안 존재해야합니다.

관련 문제