我收到此警告“警告C4800:'int':强制值为bool'true'或'false'(性能警告)”在下面的代码行中:
if (g_objConfigurationDetails.bAutoScan != m_objScanNASBtn.GetCheck())
{
g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck();
}
两条线都发出相同的警告。 其中bAutoScan = bool m_objScanNASBtn = CButton
答案 0 :(得分:0)
原因是MFC的GetCheck没有返回bool:
使用BS_AUTOCHECKBOX,BS_AUTORADIOBUTTON,BS_AUTO3STATE,BS_CHECKBOX,BS_RADIOBUTTON或BS_3STATE样式创建的按钮控件的返回值是以下值之一:
- BST_UNCHECKED - 未选中按钮状态 - BST_CHECKED - 检查按钮状态 - BST_INDETERMINATE - 按钮状态是不确定的(仅当按钮具有BS_3STATE或BS_AUTO3STATE样式时才适用。)
所以你可能想要
if (g_objConfigurationDetails.bAutoScan
!= (m_objScanNASBtn.GetCheck() == BST_CHECKED))
或
bool bNASBtnChecked = (m_objScanNASBtn.GetCheck() == BST_CHECKED);
if (g_objConfigurationDetails.bAutoScan != bNASBtnChecked)
{
g_objConfigurationDetails.bAutoScan = bNASBtnChecked;
}
答案 1 :(得分:0)
以下内容:
g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck();
应该是
g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck() == BST_CHECKED;
问题是GetCheck()
没有返回bool
所以你必须写一个比较 - 至少以!= 0
的形式。
答案 2 :(得分:0)
GetCheck
返回一个整数,你将它与布尔值进行比较。尝试将GetCheck
与BST_UNCHECKED
或BST_CHECKED
进行比较,具体取决于您的布尔值,或者将其强制转换为布尔值,因为2个值在数字上匹配true和false。