VS2019 C++ 错误 C2280 试图引用已删除的函数 inl
Posted
技术标签:
【中文标题】VS2019 C++ 错误 C2280 试图引用已删除的函数 inl【英文标题】:VS2019 C++ Error C2280 Attempting to reference a deleted function inl 【发布时间】:2021-09-10 19:18:36 【问题描述】:我是 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);
【问题讨论】:
这个宏DECLARE_DYNAMIC(CBrush)是什么意思? 错误信息表示编译器将CBrush类的拷贝构造函数设置为删除。而在这个初始化静态 CBrush BrushList[] = CBrush(ClrList[0]),, ... ;使用了复制构造函数。 【参考方案1】:根据Microsoft's documentation,您需要为CBrush
对象添加一个复制构造函数。
标准的 C++ 默认类复制构造函数执行逐个成员的复制。如果您的类的复制构造函数需要但不可用,则私有 CObject 复制构造函数的存在保证了编译器错误消息。如果您的类需要此功能,请提供复制构造函数。
【讨论】:
以上是关于VS2019 C++ 错误 C2280 试图引用已删除的函数 inl的主要内容,如果未能解决你的问题,请参考以下文章
C++错误C2280 - 试图引用一个已删除的函数 - 在基元类型上。
编译器错误 C2280,试图引用已删除的函数 operator=