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 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度