gpt4 book ai didi

c++ 为什么我不能将 CDC 和 CBitmap 类型传递给另一个类的参数?

转载 作者:行者123 更新时间:2023-11-30 03:04:50 25 4
gpt4 key购买 nike

我正在尝试将参数从一个类设置到另一个类。但是对于类型 CDC 和 CBitmap,它不会让我??

dcMem和m_bmp是类中的实例变量或参数

(另请注意,我使用的是 vc++ 6.0)

error C2582: 'CDC' : 'operator =' function is unavailable
error C2582: 'CBitmap' : 'operator =' function is unavailable

.

Image::Set_dcMem(CDC _dcMem)
{
dcMem = _dcMem;
}

.

Image::Set_m_bmp(CBitmap _m_bmp)    
{
m_bmp = _m_bmp;
}

我也试过只设置其他类的参数,但得到了上面列出的相同错误:

Image *pImage = new Image;
pImage->dcMem = dcMem;
pImage->m_bmp = m_bmp;

我找到了这个链接,但不确定如何申请:

http://msdn.microsoft.com/en-us/library/ccb3dh5c%28v=vs.80%29.aspx

http://msdn.microsoft.com/en-us/library/aa983787%28v=vs.71%29.aspx

从下方更正:

CDC* dcMem;
CBitmap *m_bmp;

Image *pImage = new Image;
pImage->dcMem = &dcMem;
pImage->m_bmp = &m_bmp;

最佳答案

当您使用= 分配一个对象时,对象被复制,左边的变量已经被实例化,所以它必须以某种方式获得右边对象状态的拷贝作业。

但有时很难复制一个对象。在某些情况下,这是因为对象的某些内部数据成员无法复制,或者因为复制它们很困难或很耗时。

在任何情况下,当类的作者决定拷贝不适用于该类时,他/她取消定义 operator= 方法,以防止类的用户尝试分配那个类的对象。参见 this question有关这方面的一些额外信息。

但这不是什么大问题。通常,对于这种类型的对象,无论如何你都不想愉快地触发对象的拷贝。相反,您要做的是使用引用和指针。

class Image {
CDC* dcMem; // <-- declare member variable as a reference
};

Image::Set_dcMem(CDC& _dcMem) // <-- pass references instead of objects
{
dcMem = &_dcMem; // <-- you can assign references just fine
}

关于c++ 为什么我不能将 CDC 和 CBitmap 类型传递给另一个类的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8322070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com