头文件内容
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)); 处但是不知道为什么出错
该回答引用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 运算符来释放内存,并删除窗口对象。
希望这能帮助您解决问题。