2010-12-14 58 views
0

J'obtiens cet avertissement "warning C4800: 'int': forcer la valeur à bool 'true' ou 'faux' (avertissement de performance) "sous la ligne de code:warning C4800: 'int': forcer la valeur bool 'true' ou 'false' (avertissement de performance) dans MFC (VC++)

if (g_objConfigurationDetails.bAutoScan != m_objScanNASBtn.GetCheck()) 
     { 
      g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck(); 
} 

les deux lignes donnent le même avertissement. où bAutoScan = bool m_objScanNASBtn = CButton

Répondre

0

La raison est que MFC GetCheck ne renvoie pas bool:

La valeur de retour d'un bouton de commande créé avec le BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON ou style BS_3STATE est l'une des valeurs suivantes:
- BST_UNCHECKED - L'état du bouton est décoché.
- BST_CHECKED - L'état du bouton est vérifié.
- BST_INDETERMINATE - L'état du bouton est indéterminé (s'applique uniquement si le bouton a le style BS_3STATE ou BS_AUTO3STATE).

Donc, vous voulez probablement

if (g_objConfigurationDetails.bAutoScan 
     != (m_objScanNASBtn.GetCheck() == BST_CHECKED)) 

ou

bool bNASBtnChecked = (m_objScanNASBtn.GetCheck() == BST_CHECKED); 
if (g_objConfigurationDetails.bAutoScan != bNASBtnChecked) 
{ 
    g_objConfigurationDetails.bAutoScan = bNASBtnChecked; 
} 
0

qui suit:

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck(); 

devrait être

g_objConfigurationDetails.bAutoScan = m_objScanNASBtn.GetCheck() == BST_CHECKED; 

Le problème est GetCheck() ne renvoie pas bool donc vous devez écrire une comparaison - au moins sous la forme de != 0.

0

GetCheck renvoie un entier et vous le comparez à un booléen. Essayez de comparer GetCheck à BST_UNCHECKED ou BST_CHECKED en fonction de votre valeur booléenne ou de le convertir en booléen, car les valeurs 2 correspondent à true et false numériquement.