尝试初始化MFC CCriticalSection时获取错误C2248

时间:2012-10-05 22:20:29

标签: c++ mfc

我一直在尝试修复/找到一个小时左右的解决方案。 基本上我有:

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文件给我例外。

2 个答案:

答案 0 :(得分:0)

如果你想在CRITICAL_SECTION上同步多个线程,你可以共享一个指向同一个关键部分的指针,但你实际上无法复制CRITICAL_SECTION。

答案 1 :(得分:0)

还有一个CEvent在那里,所以我想我也会把它变成一个指针,而且你知道whaddya。它解决了这个问题。现在有一个afxmt.h文件给我例外。