hzg392622955 2014-06-11 08:34 采纳率: 0%
浏览 760

使用map添加窗口类时出现错误

头文件内容
typedef std::map mapDlgVideo;
typedef mapDlgVideo::iterator mapDlgVideoIter;

mapDlgVideo m_mapDlgVideo;

CPP文件内容
for(int i = 0 ; i < m_nMaxEncodeNum; ++i )
{
CDlgVideo video ;
BOOL ret = video.Create(CDlgVideo::IDD);
video.SetVideoIndex(i);
video.SetActive(FALSE);
m_mapDlgVideo.insert(mapDlgVideo::value_type(i, video));
}

请帮我分析下这段代码的错误
错误信息为错误 error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)

分析问题出现在m_mapDlgVideo.insert(mapDlgVideo::value_type(i, video)); 处但是不知道为什么出错

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-16 13:05
    关注

    该回答引用ChatGPT

    根据错误信息,可以看出问题出在 CObject::CObject 上,这是因为 CDlgVideo 继承自 CObject 类,而 CObject 类的构造函数是私有的,无法从外部访问。


    为了解决这个问题,你需要确保 CDlgVideo 的构造函数是公共的,并且实现了必要的方法。另外,为了避免内存泄漏,你还需要在 CDlgVideo 的析构函数中删除窗口对象。


    这是一个可能的解决方案:

    在 CDlgVideo.h 中添加如下代码:

    public:
        CDlgVideo();
        virtual ~CDlgVideo();
    

    在 CDlgVideo.cpp 中添加如下代码:

    CDlgVideo::CDlgVideo() {}
    CDlgVideo::~CDlgVideo()
    {
        if (::IsWindow(m_hWnd))
        {
            DestroyWindow();
        }
    }
    

    这样,在您的代码中,您可以创建 CDlgVideo 的实例,然后将它们添加到您的 map 中,例如:

    for(int i = 0 ; i < m_nMaxEncodeNum; ++i )
    {
        CDlgVideo* video = new CDlgVideo();
        BOOL ret = video->Create(CDlgVideo::IDD, this);
        video->SetVideoIndex(i);
        video->SetActive(FALSE);
        m_mapDlgVideo.insert(mapDlgVideo::value_type(i, video));
    }
    

    请注意,我们使用了指向 CDlgVideo 对象的指针,并且使用了 new 运算符来动态分配内存。在析构函数中,我们使用 delete 运算符来释放内存,并删除窗口对象。


    希望这能帮助您解决问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用