c++ - VS2019 C++ 错误 C2280 试图引用已删除的函数 inl
问题描述
我是 C++ 的入门级。试图建立一个不是我创建的项目。插入一些丢失的库后,我遇到了 C2280 错误:'CBrush::CBrush(const CBrush &)':试图引用已删除的函数'。我对如何开始深入了解问题的根源感到困惑。
static COLORREF ClrList[] = { RGB(128,0,0), // Red
RGB(128,128,0), // Dark yellow
RGB(0,200,0), // Green
RGB(0,200,200), // Cyan
RGB(0,0,255), // Blue
RGB(125,42,249), // Purple
RGB(255,128,0), // Orange
RGB(0,0,0) }; // Black
static CBrush BrushList[] = { CBrush(ClrList[0]), //Error 2280
CBrush(ClrList[1]),
CBrush(ClrList[2]),
CBrush(ClrList[3]),
CBrush(ClrList[4]),
CBrush(ClrList[5]),
CBrush(ClrList[6]),
CBrush(ClrList[7]) };
CBrush 类声明:
class CBrush : public CGdiObject
{
DECLARE_DYNAMIC(CBrush)
public:
static CBrush* PASCAL FromHandle(HBRUSH hBrush);
// Constructors
CBrush();
CBrush(COLORREF crColor); // CreateSolidBrush
CBrush(int nIndex, COLORREF crColor); // CreateHatchBrush
explicit CBrush(CBitmap* pBitmap); // CreatePatternBrush
BOOL CreateSolidBrush(COLORREF crColor);
BOOL CreateHatchBrush(int nIndex, COLORREF crColor);
BOOL CreateBrushIndirect(const LOGBRUSH* lpLogBrush);
BOOL CreatePatternBrush(CBitmap* pBitmap);
BOOL CreateDIBPatternBrush(HGLOBAL hPackedDIB, UINT nUsage);
BOOL CreateDIBPatternBrush(const void* lpPackedDIB, UINT nUsage);
BOOL CreateSysColorBrush(int nIndex);
// Attributes
operator HBRUSH() const;
int GetLogBrush(LOGBRUSH* pLogBrush);
// Implementation
public:
virtual ~CBrush();
#ifdef _DEBUG
virtual void Dump(CDumpContext& dc) const;
#endif
};
我不熟悉 inl 文件,但我认为这是内联声明:
_AFXWIN_INLINE CBrush::operator HBRUSH() const
{ return (HBRUSH)(this == NULL ? NULL : m_hObject); }
_AFXWIN_INLINE CBrush* PASCAL CBrush::FromHandle(HBRUSH hBrush)
{ return (CBrush*) CGdiObject::FromHandle(hBrush); }
_AFXWIN_INLINE CBrush::CBrush()
{ }
_AFXWIN_INLINE CBrush::~CBrush()
{ }
_AFXWIN_INLINE BOOL CBrush::CreateSolidBrush(COLORREF crColor)
{ return Attach(::CreateSolidBrush(crColor)); }
_AFXWIN_INLINE BOOL CBrush::CreateHatchBrush(int nIndex, COLORREF crColor)
{ return Attach(::CreateHatchBrush(nIndex, crColor)); }
_AFXWIN_INLINE BOOL CBrush::CreateBrushIndirect(const LOGBRUSH* lpLogBrush)
{ return Attach(::CreateBrushIndirect(lpLogBrush)); }
_AFXWIN_INLINE BOOL CBrush::CreatePatternBrush(CBitmap* pBitmap)
{ return Attach(::CreatePatternBrush((HBITMAP)pBitmap->GetSafeHandle())); }
_AFXWIN_INLINE BOOL CBrush::CreateDIBPatternBrush(const void* lpPackedDIB, UINT nUsage)
{ return Attach(::CreateDIBPatternBrushPt(lpPackedDIB, nUsage)); }
_AFXWIN_INLINE BOOL CBrush::CreateSysColorBrush(int nIndex)
{ return Attach(::GetSysColorBrush(nIndex)); }
_AFXWIN_INLINE int CBrush::GetLogBrush(LOGBRUSH* pLogBrush)
{ ASSERT(m_hObject != NULL);
return ::GetObject(m_hObject, sizeof(LOGBRUSH), pLogBrush); }
解决方案
根据Microsoft 的文档,您需要为该CBrush
对象添加一个复制构造函数。
标准 C++ 默认类复制构造函数执行逐个成员的复制。如果您的类的复制构造函数需要但不可用,则私有 CObject 复制构造函数的存在保证了编译器错误消息。如果您的类需要此功能,请提供复制构造函数。
推荐阅读
- flutter - 上传到 Play 商店 64 位警告
- php - 仅当用户不是管理员时,wordpress 中的 php 函数才适用
- android - 使用 android 数据绑定 + Kotlin + ViewModel 的 ListAdapter 点击事件问题
- python-3.x - 具有自定义初始分数的 PageRank
- php - 如何在 php 中提取内部 JSON 变量?
- java - 错误:使用包含匕首生成源的 Gradle 编译 Java 项目时出现重复类
- python - 如何有效地检查数据库中是否存在名称
- c# - 创建仅负责创建其他对象(即工厂)的类时的最佳实践?
- python - 从 Mongo 获取 dict 并使用 Numpy 转换为 ndarray
- javascript - 使用素材箱放大动态显示的图像