Projet iut info

Projet iut info - C++ - Programmation

Marsh Posté le 13-03-2004 à 10:56:06    

Voila comme vous l'avez certainemt compris j'ai actuellement un projet de programmation à réalisé, Mais dans celui ci quelque chose me choque je n'ai aucun pb à la compilation ms plusieurs pb lors de l'utilisation du logiciel.
entre autre :  
- Un destructeur appellé une dizaine de fois lors du retour au menu
- Une vérification ds une map qui marche une fois ur 2 ...
 
J'aimerais donc avoir quelques conseils de votre part mais je n'ai nul part ou loger mon projet.
Une idée ?
 
Merci d'avance

Reply

Marsh Posté le 13-03-2004 à 10:56:06   

Reply

Marsh Posté le 13-03-2004 à 11:27:53    

Peut-être en postant un peu de code (celui du menu par exemple), tu auras plus de réponses :)
 
@+

Reply

Marsh Posté le 13-03-2004 à 11:38:23    

voila mon menu mais tt seul c assez desuet il manque plein de fichier  

Code :
  1. #include "Dialogue.h"
  2. #include <string>
  3. #include "Terminal.h"
  4. #include "Match.h"
  5. #include "LesEquipes.h"
  6. #include "LesButeuses.h"
  7. Dialogue::Dialogue()
  8. :sesEquipes(LesEquipes())
  9. ,sesButeuses(LesButeuses())
  10. {}
  11. void Dialogue::menu()
  12. {
  13. terminal.afficheMessage("---Menu Principal---" );
  14. terminal.afficheMessage("1) Saisir les resultats d'un match." );
  15. terminal.afficheMessage("2) Voir les donnees d'un match." );
  16. terminal.afficheMessage("3) Voir le classement des buteuses." );
  17. terminal.afficheMessage("4) Voir le classement general." );
  18. terminal.afficheMessage("5) Quitter" );
  19. int a=terminal.demandeInt("Que voulez vous faire : (1,2,3,4 ou 5) ?" );
  20. switch(a)
  21. {
  22.  case 1:
  23.   cas1();
  24.   break;
  25.  case 2:
  26.   cas2();
  27.   break;
  28.  case 3:
  29.   cas3();
  30.   break;
  31.  case 4:
  32.   cas4();
  33.   break;
  34.  case 5:
  35.   break;
  36.  default:
  37.   menu();
  38.   break;
  39. }
  40. return;
  41. }
  42. void Dialogue::cas1()
  43. {
  44. Match unMatch;
  45. unMatch.saisieDonneesMatch();
  46. return;
  47. }
  48. void Dialogue::cas2()
  49. {
  50. Match unMatch;
  51. unMatch.afficherDonneesMatch();
  52. return;
  53. }
  54. void Dialogue::cas3()
  55. {
  56. return;
  57. }
  58. void Dialogue::cas4()
  59. {
  60. return;
  61. }


Message édité par john8585 le 13-03-2004 à 14:12:03
Reply

Marsh Posté le 13-03-2004 à 11:42:16    

Code :
  1. #include "Dialogue.h"
  2. #include <string>
  3. #include "Terminal.h"
  4. #include "Match.h"
  5. #include "LesEquipes.h"
  6. #include "LesButeuses.h"
  7. Dialogue: Dialogue()
  8. :sesEquipes(LesEquipes())
  9. ,sesButeuses(LesButeuses())
  10. {}
  11. void Dialogue::menu()
  12. {
  13. terminal.afficheMessage("---Menu Principal---" );
  14. terminal.afficheMessage("1) Saisir les resultats d'un match." );
  15. terminal.afficheMessage("2) Voir les donnees d'un match." );
  16. terminal.afficheMessage("3) Voir le classement des buteuses." );
  17. terminal.afficheMessage("4) Voir le classement general." );
  18. terminal.afficheMessage("5) Quitter" ); 
  19. int a=terminal.demandeInt("Que voulez vous faire : (1,2,3,4 ou 5) ?" );
  20. switch(a)
  21. {
  22.   case 1:
  23.    cas1();
  24.    break;
  25.   case 2:
  26.    cas2(); 
  27.    break;
  28.   case 3:
  29.    cas3(); 
  30.    break;
  31.   case 4:
  32.    cas4(); 
  33.    break;
  34.   case 5:
  35.    break;
  36.   default:
  37.    menu();
  38.    break;
  39. }
  40. return;
  41. }
  42. void Dialogue::cas1()
  43. {
  44. Match unMatch;
  45. unMatch.saisieDonneesMatch();
  46. return;
  47. }
  48. void Dialogue::cas2()
  49. {
  50. Match unMatch;
  51. unMatch.afficherDonneesMatch();
  52. return;
  53. }
  54. void Dialogue::cas3()
  55. {
  56. return;
  57. }
  58. void Dialogue::cas4()
  59. {
  60. return;
  61. }


Message édité par Evadream -jbd- le 13-03-2004 à 11:43:47
Reply

Marsh Posté le 13-03-2004 à 11:47:47    

Code :
  1. {
  2. Match unMatch;
  3. unMatch.saisieDonneesMatch();
  4. return;
  5. }


 
Tu créees un "Match" (appel au constructeur), mais dès que tu sors de la fonction, l'objet est détruit, il y a donc un appel au destructeur, rien d'anormal.
 
Tu devrais poster encore un peu plus de code, et dire exactement ce qui ne va pas (genre quel est le destructeur appelé 10 fois etc...)
 
@+

Reply

Marsh Posté le 13-03-2004 à 11:50:25    

bon je vous montre ce qui se passe lors de la saisie d'1 nveau match :  

Code :
  1. void Match::saisieDonneesMatch()
  2. {
  3. eqDom=saisieEquipe(true);
  4. while (!eqDom.empty())
  5. {
  6.  if (sesEquipes.existeEquipe(eqDom))
  7.  {
  8.   eqExt=saisieEquipe(false);
  9.   while (!eqExt.empty())
  10.   {
  11.    if (sesEquipes.existeEquipe(eqExt) && eqExt!=eqDom)
  12.    {
  13.    scoreEquipeDom=saisieScore(true);
  14.    buteusesDomicile=mapButeusesMatch(scoreEquipeDom, true);
  15.    scoreEquipeExt=saisieScore(false);
  16.    buteusesExterieur=mapButeusesMatch(scoreEquipeExt,false);
  17.    Match m1(scoreEquipeDom, scoreEquipeExt, buteusesDomicile, buteusesExterieur);
  18.    std::pair<std::string, std::string> p1(eqDom, eqExt);
  19.    std::pair<std::pair<std::string, std::string>, Match> p2(p1, m1);
  20.    LesMatchs().sauverMatch(p2);
  21.    terminal.afficheMessage("MAP Sauvee on passe a la suite !!!!! !!" );
  22.    eqExt="";
  23.    //..Verif insertion et message de bon fonctionnemt
  24.    }
  25.    else
  26.    terminal.afficheMessage("Entrez une Equipe existante ou differente de \
  27. la premiere" );
  28.    eqExt="";
  29.   }
  30.  }
  31.  else
  32.  terminal.afficheMessage("Entrez une Equipe existante " );
  33. eqDom="";
  34. }
  35. Dialogue dialogue;
  36. dialogue.menu();
  37. }


Code :
  1. Match::Match(int scoreDom, int scoreExt,
  2.  std::map<std::string,Buteuse> & buteusesDom,
  3.  std::map<std::string,Buteuse> & buteusesExt)
  4. :scoreEquipeDom(scoreDom)
  5. ,scoreEquipeExt(scoreExt)
  6. ,buteusesDomicile(buteusesDom)
  7. ,buteusesExterieur(buteusesExt)
  8. {}
  9. Match::Match()
  10. :sesEquipes(LesEquipes())
  11. ,sesButeuses(LesButeuses())
  12. ,scoreEquipeDom(0)
  13. ,scoreEquipeExt(0)
  14. {
  15. //sonClassementEquipes.chargerMultimap(feClassEq);
  16. //sonClassementButeuses.chargerMultimap(feClassBut);
  17. }
  18. Match::~Match()
  19. {
  20. //Configuration uneConf;  
  21. //sonClassementEquipes.chargerMultimap(feClassEq);
  22. //sonClassementButeuses.chargerMultimap(feClassBut);
  23. }


 
desole je connaissais pas ces balises ms sinon des id ?


Message édité par john8585 le 13-03-2004 à 14:04:49
Reply

Marsh Posté le 13-03-2004 à 13:06:03    

Utilises les balises "[ cpp ] / [ /cpp ]" ;)


Message édité par Evadream -jbd- le 13-03-2004 à 13:06:16
Reply

Marsh Posté le 13-03-2004 à 21:31:17    

vraimt pas d'idée bon ben tt pis je suis reparti pour quelques heures de galeres

Reply

Marsh Posté le 13-03-2004 à 23:23:00    

Citation :


void Match::saisieDonneesMatch()  
{  
eqDom=saisieEquipe(true);  
while (!eqDom.empty())  
{  
    if (sesEquipes.existeEquipe(eqDom))  
    {  
         eqExt=saisieEquipe(false);  
         while (!eqExt.empty())  
         {  
             [...]
             eqExt="";  
         }  
    }  
    else  
        terminal.afficheMessage("Entrez une Equipe existante " );  
    eqDom="";  
}  
Dialogue dialogue;  
dialogue.menu();
   
}  
 
void Dialogue::cas1()  
{  
   Match unMatch;  
    unMatch.saisieDonneesMatch();

    return;  
}  


Soit j'ai mal compris, soit le code en bleu mérite d'être repris.
Apparement y'a aussi une référence croisée entre Match et Dialogue. Les ref croisées c'est mal. Tu empiles des contructions de Match et Dialogue tant que t'es dans des casX() (au passage vire les return;) et une fois fini hop ça doit dépiler et se détruire.
Si ton main ressemble à ça :

Code :
  1. Dialogue dialogue;
  2. dialogue.menu();


et que tu entres 1) et 2) ça fait :

Code :
  1. int main()
  2. {
  3. Dialogue dialogue; // creation Dialogue
  4. dialogue.menu();
  5.     void Dialogue::cas1()
  6.     {
  7.         Match unMatch; // creation Match
  8.         unMatch.saisieDonneesMatch();
  9.             void Match::saisieDonneesMatch()
  10.             {
  11.                 [...]
  12.                 Dialogue dialogue; // creation Dialogue
  13.                 dialogue.menu(); 
  14.                     void Dialogue::cas2()
  15.                     {
  16.                         Match unMatch; // creation Match
  17.                         unMatch.saisieDonneesMatch();
  18.                         // 5) Quitter
  19.                     } // destruction Match
  20.             } // destruction Dialogue
  21.          } // destruction Match
  22.     }
  23. } // destruction Dialogue


Mets ton truc sur papier, dessine ton diagramme des classes et recommence ton truc, car ton design + ton code est assez, hum, merdique.
Par exemple, dans Dialogue::menu, tu ne fais rien puisque tu travailles avec des var locales.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 14-03-2004 à 11:51:06    

En fait pour le moment je ne fait que le cas 1 car j'ai de celui ci pour mettre en place les cas d'utilisations suivants donc je ne construit qu'un match mais effectivement je ferais peut etre mieux de construire le match une fois pour toute dans le constructeur de Dialogue
 
PS : désolé pr le style texto c une mauvaise habitude mais c'est corrigé


Message édité par john8585 le 15-03-2004 à 09:57:24
Reply

Marsh Posté le 14-03-2004 à 11:51:06   

Reply

Marsh Posté le 14-03-2004 à 17:18:09    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed