bon voila je comprend pas pourquoi cela ne marche plus ...
donc pour résumé jais 2 class pour le moment :
- EntityManager
- Entity
tout est géré via des std::list<> ( Entity liste pour EntityManager et std::string liste pour Entity )
la ou ça ne colle pas ses que je veut récupéré l'attribut qui se trouve dans un pointeur de Entity qui se trouve dans EntityManager
donc pour résumé dans le main je fait :
for(int i = 0; i != entity->getNomberEntity(); i++) { Entity *get = entity->getEntity(i); if(get != NULL) { cout << "At ID : " << get->getID(); cout << " thas type is " << get->getTypeName(); cout << " and attribute is : " << get->getAttribute("Attribute").c_str();//! la ou sa ne marche pas cout << endl; } }
les fonctions :
Entity*EntityManager::getEntity(int loc)
{
if(loc <= ent.size())
{
int n = 0;
for (std::list<Entity>::iterator It = ent.begin() ; It != ent.end() ; It++)
if(n++ == (loc))
return &*It;
}
}
std::string Entity::getAttribute(std::string Ent) { for (std::list<EntityAttribute>::iterator It = Attribute.begin() ; It != Attribute.end() ; It++) { std::string cmp = ((EntityAttribute)*It).ent; if(Ent == cmp) { return ((EntityAttribute)*It).att; break; } } return 0;//for delete warning "control reaches and of non-void function" }
voila donc si je récupère l'attribue d'une Entity* cela me retourne : "this application has request the Runtime to terminate ...." exit 0x03
par contre si je passe par le pointeur de l'initialisation de L'Entity, aucun problème ... ( donc ne viens pas de "return ((EntityAttribute)*It).att;" )
je peut poster tout le code s'il y a besoins
merci d'avance
Dernière modification par Magun (12-02-2009 08:00:40)
Hors ligne
J'avoue que je pige pas le message d'erreur, y'a des erreurs de compilation ? un plantage de l'appli. Apparemment tu ne nous a communiqué que le code d'erreur retourné par le processus (0x03) ce qui n'est pas très explicite...
Mais à première vue je ne vois pas trop le problème dans ton code. Peux-tu nous donner plus d'informations sur le log d'erreurs ou comment le problème survient ?
Hors ligne
voila pour les sources
le programme retourne 3 (0x3)
a la ligne :
cout << " and attribute is : " << get->getAttribute("Attribute");
alors le truc ses pourquoi sa fonctionne pas ci-dessus alors que ceci fonctionne
for(int i = 0; i != entity->getNomberEntity(); i++) { //if(get != NULL) { cout << "At ID : " << ent[i]->getID(); cout << " thas type is " << ent[i]->getTypeName(); cout << " and attribute is : " << ent[i]->getAttribute("Attribute"); cout << endl; } }
sachant que le debug ne trouve absolument rien . . .
donc alors sa ne vien pas de la fonction "Entity *get = entity->getEntity(i);" sinon cela ne marcherais pas sans l'appelle du code cité en premier
et cela ne devrait pas venir de "getAttribute("Attribute");" car cela marche sur le code cité au dessus . . .
Hors ligne
Je ne sais pas si c'est un élément de réponse, mais il y a un truc qui me choque dans ton code.
for(int i = 0; i != entity->getNomberEntity(); i++) { Entity *get = entity->getEntity(i); if(get != NULL) { cout << "At ID : " << get->getID(); cout << " thas type is " << get->getTypeName(); cout << " and attribute is : " << get->getAttribute("Attribute").c_str();//! la ou sa ne marche pas cout << endl; } }
Pourquoi avoir mis un ".c_str()" après getAttribute("Attribute") ? La fonction renvoyant un std::string, pas besoin d'un c_str() pour l'afficher, d'ailleurs dans l'exemple que tu montres et qui fonctionne, il n'y est pas....
Je ne sais pas si cette remarque servira à quelque chose, mais bon à part ça, je ne vois pas ce qui cloche.
Bon courage.
Hors ligne
oui ".c_str()" ne sert a rien c'était un test, des fois que ... mais cela ne change rien
merci pour la remarque
Hors ligne
et bien le debug ne trouve rien il quitte aussi tôt
et le watcher je ne l'utilise pas
a la rigueur s'il y avais un lien sympa pour expliquer comment cela marche ...
Hors ligne
je devrais trouver comment contacter la stl a votre avis ?
par ce que je voie vraiment pas d'où cela viens et je nais aucun warning même avec tout les option pour ceux-ci
jais essayer d'utiliser un "vector" a la place d'une "list" dans la class EntityManager, mais pareille
Dernière modification par Magun (14-02-2009 23:22:29)
Hors ligne
problème résolue sur le SDZ
merci quand même, en fait le problème venais de "addEntity(Entity*ent)"
et plus précisément de la façons dont je l'ajoutais, en gros sans le vouloir le fesais une nouvelle Entity* que j'ajoutais grâce à "push_back" seulement ce dernier fessais une copie de l'entity et ne pouvais retourner l'attribue que était alors stoker dans l'Entity* qui se trouvais dans le main
ah était a cause du "return NULL;" dans le "getAttribute", il suffisais de renvoyer une chaine vide
merci a vous tout de même
sur ceux bon codage a tous ( et à toutes ? )
Dernière modification par Magun (16-02-2009 00:10:31)
Hors ligne