【问题标题】:Getting error C2248 while trying to initialize MFC CCriticalSection尝试初始化 MFC CCriticalSection 时出现错误 C2248
【发布时间】: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 代码行。

标签: c++ mfc


【解决方案1】:

如果您希望多个线程在 CRITICAL_SECTION 上同步,您可以共享指向同一个关键部分的指针,但实际上不能复制 CRITICAL_SECTION。

【讨论】:

  • 我正在共享一个指向具有指向 CriticalSection 的指针的类的指针,因此没有完成复制。注释掉代码中的其他线程,没有效果。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2021-06-17
    • 2021-09-27
    • 2020-01-08
    相关资源
    最近更新 更多