c++ - 警告 C4238 : nonstandard extension used : class rvalue used as lvalue

标签 c++ visual-c++ visual-studio-2008 c++builder

这是我的代码

   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);
}

关于c++ - 警告 C4238 : nonstandard extension used : class rvalue used as lvalue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371133/

相关文章:

c++ - Qt - 禁用单元格编辑

c++ - 在哪里可以找到用于减小 MSVC++/Windows 上的二进制文件大小的分析器?

c# - 如何在设计器中单击用户控件子项?

visual-studio-2008 - 为什么将对象的地址转换为与 this 指向的相同的类会导致另一个对象值?

c++ - 如何确保模板参数是所需类型的子类型?

c++ - 'isprint' 在 solaris 上为不可打印的字符返回 true

c++ - libzip 与 zip_source_buffer 会导致数据损坏和/或段错误

c++ - 在 C/C++ 语言中... for 循环在内部编译为 While 循环吗?

c++ - DeleteTimerQueueTimer() 访问冲突和/或死锁

sql-server - 是否可以在 OLE DB 连接管理器下的 SSIS 包内使用多个数据源?