2012-10-05 71 views
1

我一直在試圖修復/找到一個小時左右的解決方案。 基本上我有:嘗試初始化MFC時出錯C2248 CCriticalSection

CCriticalSection pCS; 

類聲明裏面,然後我使用這樣的CSingleLock:

CSingleLock pSL(&pCS); 
pSL.Lock(); 
*Stuff happening here* 
pSL.Unlock(); 

以鎖定和解鎖的PCS。但是初始化CriticalSection的,似乎在這最後總是:

c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afxmt.h(82): error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject' 
c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(535) : see declaration of 'CObject::operator =' 
c:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(509) : see declaration of 'CObject' 
This diagnostic occurred in the compiler generated function 'CSyncObject &CSyncObject::operator =(const CSyncObject &)' 

我已經在計劃中4個工作線程,我把他們的指針,它指向CCriticalSection是類和線程上的工作CCriticalSection,以及主線程。線程使用類的指針來使用使用CCriticalSection的CSingleLock。

爲了您的信息,代碼還包括Direct2D,但不應該是相關的。

一些幫助,將不勝感激。

編輯:

只是試圖做一個新項目,只是:

#include <afxmt.h> 

在裏面。它給了我例外。這是正常的嗎?我正在使用VC++ 2010 Professional。

解決:

有一個CEvent的那裏藏漢,所以我想我會讓它變成一個指針,以及,那麼,有什麼你知道。它解決了這個問題。現在有一個afxmt.h文件給我例外。

+0

錯誤表明您正在嘗試創建一個'CCriticalSection'副本,但該類型不可複製。您需要展示更多代碼,即試圖執行所述副本的代碼。 – ildjarn

+1

任何可能存在*這個關鍵部分(代碼中的pCS)以任何方式被複制的對象?看起來好像是引用了CCriticalSection的複製構造函數。如果你沒有明確地複製暴擊,你是否明確或隱含地複製持有它的對象?隱藏你的類的複製構造函數(使其成爲私有的),如果它破壞了編譯的某個地方,那麼你就是失敗點)。 – WhozCraig

+0

我只聲明變量,然後使用CSingleLocks使用CCriticalSection。代碼中的CriticalSection被複制的地方沒有意義。我將CCriticalSection pCS更改爲CCriticalSection * pCS,但它仍然不起作用。 – Nooobody

回答

0

有一個CEvent也在那裏,所以我想我也會把它做成一個指針,你知道的whaddya。它解決了這個問題。現在有一個afxmt.h文件給我例外。

0

如果您希望多個線程在CRITICAL_SECTION上進行同步,您可以共享一個指向同一個關鍵部分的指針,但實際上無法制作CRITICAL_SECTION的副本。

+0

我正在共享一個指向具有指向CriticalSection的類的指針,所以沒有複製完成。將其他線程從代碼註釋掉,沒有效果。 – Nooobody