2010-11-29 6 views
0

Comment faire pour convertir CString en type Enum dans MFC (VC++)?Convertir CString en type Enum dans MFC (VC++)?

J'ai une méthode qui prend le paramètre d'entrée comme Enum mais je lui passe la valeur Cstring comment je peux le convertir en enum.

CString strFolderType = strFolderType.Right(strFolderType.GetLength()-(fPos+1)); 
m_strFolderType = strFolderType ; 

J'ai une méthode comme

ProtocolIdentifier(eFolderType iFolderType) 

where enum eFolderType 
{ 
    eFTP = 1, 
    eCIFS, 
    eBOTH 
}; 


now when i am calling like this : 
ProtocolIdentifier(m_strFolderType); 



It says cannot convert CString to eFolderType ... 
How to resolve this ? 

Répondre

1

Pourquoi est-m_strFolderType une chaîne? Il semble que ce devrait être un eFolderType.

Il n'existe aucun moyen automatique de convertir un CString en un enum (qui est réellement un nombre entier). Les valeurs eFTP, eCIFS et eBOTH ne sont pas des chaînes et le compilateur ne les traite pas comme telles. Passer un nombre entier comme chaîne est moche.

Vous devez passer un eFolderType comme argument. Si vous devez passer une chaîne (peut-être provient-elle d'une sérialisation qui a renvoyé une chaîne), vous devrez faire quelque chose comme ceci:

eFolderType result = /* whichever should be the default*/ ; 
if (m_strFolderType == _T("eFTP")) { 
    result = eFTP; 
} else if (m_strFolderType == _T("eCIFS")) { 
    result = eCIFS; 
} else if (m_strFolderType == _T("eBOTH")) { 
    result = eBOTH; 
} else { 
    // Invalid value was passed: either use the default value or 
    // treat this as an error, depending on your requirements. 
}