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 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流