【发布时间】:2012-10-06 20:38:56
【问题描述】:
为此,我一直在尝试修复/寻找解决方案一个小时左右。 基本上我有:
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 文件给了我例外。
【问题讨论】:
-
该错误表明您正在尝试复制
CCriticalSection,但该类型不可复制。您需要显示更多代码,即尝试执行所述复制的代码。 -
有没有机会以任何方式复制持有这个关键部分的对象(代码中的 pCS)?似乎正在引用 CCriticalSection 的复制构造函数。如果您没有显式复制 crit-sec,您是否曾显式或隐式复制包含它的对象?隐藏你的类的复制构造函数(使其私有),如果它在某处破坏编译,那你就是失败点)。
-
我只是声明变量,然后使用 CSingleLocks 来使用 CCriticalSection。复制 CriticalSection 的代码没有意义。我将 CCriticalSection pCS 更改为 CCriticalSection* pCS,但仍然无法正常工作。
-
刚刚将我的类的复制构造函数设为私有,没有效果。还在抱怨 CObject。
-
@Nooobody :我保证错误消息会向您显示 your 代码的哪一行触发了问题。查看“输出”窗口,而不是“错误”窗口,并找出其中提到的 your 代码行。