警告C4238:使用了非标准扩展:类右值用作左值

warning C4238: nonstandard extension used : class rvalue used as lvalue

本文关键字:非标准 C4238 警告 扩展      更新时间:2023-10-16

这里是我的代码

   if(bSelected)
{
    clrTextSave=pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
    clrBkSave=pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
    pDC->FillRect(rcAllLabels,&CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
    pDC->FillRect(rcAllLabels,&CBrush(m_clrTextBk));

当我在Visual studio 2008上编译时,它会给我:警告C4238:使用了非标准扩展:类右值用作左值我不知道如何修复这个警告?有人帮忙吗?非常感谢。

您收到警告(这应该是一个错误,因为您应该始终使用最高警告级别编译代码),因为您正在创建一个临时的并使用它的地址。为了防止此警告,您需要创建一个本地变量:

if(bSelected)
{
    clrTextSave = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
    clrBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
    CBrush brush(::GetSysColor(COLOR_HIGHLIGHT)); // create a local variable
    pDC->FillRect(rcAllLabels, &brush); // use its address
}
else
{
    CBrush brush(m_clrTextBk); // same thing here
    pDC->FillRect(rcAllLabels, &brush);
}
相关文章: