J'ai un std :: carte a déclaré thusly dans une application MFC héritage:std :: carte iterator pas itérer dans MFC app
typedef std::map<long, CNutrientInfo> NUTRIENT_INFO_MAP;
typedef NUTRIENT_INFO_MAP::const_iterator NUTRIENT_INFO_ITER;
typedef NUTRIENT_INFO_MAP::value_type NUTRIENT_INFO_PAIR;
static NUTRIENT_INFO_MAP m_NutrientInfoMap;
m_NutrientInfoMap est renseigné lorsque la charge d'applications en boucle à travers une table et la création d'un instance de CNutrientInfo, puis l'insérer dans le std: carte comme:
m_NutrientMapInfo.insert(NUTRIENT_INFO_PAIR(nutrient.GetId(), nutrient));
le std :: carte contient maintenant une liste des nutriments qui ont été définis par la base de données. À un certain moment, un utilisateur peut ajouter un nouvel élément nutritif à cette liste et il vérifie si ce que l'utilisateur ajoute existe déjà dans la liste. Il fait cette vérification comme:
NUTRIENT_INFO_ITER iter = m_NutrientInfoMap.begin();
while (iter != m_NutrientInfoMap.end())
{
m = (*iter).second;
if (_stricmp(m.GetFullName().c_str(), name.c_str()) == 0)
{
return m;
}
iter++;
}
Ou du moins c'est censé. Lorsque la fonction est appelée, elle ne dépasse jamais la ligne initiale de la boucle while. Le fait d'y placer un point d'arrêt montre simplement que la ligne en question est appelée à plusieurs reprises et ne progresse jamais au-delà, ce qui bloque l'application. Si vous entrez dans la comparaison réelle, elle compare correctement, puis revient à la ligne de boucle while. Rentrez à nouveau pour avancer dans le corps de la boucle revient simplement à la ligne de boucle while. Cette même logique est utilisée ailleurs dans l'application sans problème, donc je suis perplexe quant à ce qui se passe dans ce cas. J'ai réécrit la logique ci-dessus en utilisant une boucle for et ça marche très bien, donc ce n'est pas comme si je ne pouvais pas contourner cela, mais C++ n'est pas mon langage le plus fort et comme c'est une application héritée En essayant d'aider, je voudrais vraiment apprendre et comprendre POURQUOI c'est ce que je fais pour l'avenir. De plus, puisque la logique fonctionne ailleurs et pas ici, il y a peut-être une cause sous-jacente qui est ce qui doit être traité.
Toutes les suggestions ou réflexions à ce sujet seraient grandement appréciées.
Merci d'avance.
Déboggez-vous en mode édition? –