Probleme a l'execution

Résolu
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008 - 18 juin 2007 à 10:27
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008 - 18 juin 2007 à 14:33
Bonjour, je suis débutant en c++ et j'ai un problème à l'execution de mon programme.
Il compile mais m'envoie un message d'erreur à l'execution.
Pour info je suis sur Visualc++ 2005

std::vector<Station> Tab;      //Tab est déja rempli avant
 int i=0;
 Station s;
 Commande E;
 double q=1.015345;
  E=C.GetCommande(i);
  s.SetCommande(E);
  s.Setemps(q);
  Tab.push_back(s);         //mon erreur

Je ne sais pas si il faut faire un resize ou pas.
Merci de m'aider.

6 réponses

lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
18 juin 2007 à 14:33
C'est bon j'ai trouvé
je fais ça à la place

void fusion1(std::vector<Station> Tab, Station& s) {
 Tab.resize(Tab.size()+1);
 Commande c=s.getCommande();
 Tab[Tab.size()-1].SetCommande(c);
 double a=s.getemps();
 Tab[Tab.size()-1].Setemps(a);
 //trifusion(Tab,0,Tab.size());
}
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 juin 2007 à 10:45
Montre ta classe Station. Le code en lui meme n'a pas d'erreur ici, donc le pb vient probablement de Station. Et c'est quoi l'erreur ?
0
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
18 juin 2007 à 10:49
Je connais pas mon erreur
Le message c'est une fenêtre toute grise avec 3 boutons .
C'est justement pour ca que j'arrive pas à résoudre mon problème

Ma classe Station

Station::Station()
{
 _temps=0;
 for(int i=0;i<6;i++) {
  _com.SetG(i,0);
 }
}


Station::Station(double& t,Commande& c)
{
 _temps=t;
 _com=c;
}


Commande& Station::getCommande()
{
 return _com;
}


double Station::getemps()
{
 return _temps;
}


void Station::SetCommande(Commande& c)
{
 _com=c;
}


void Station::Setemps(double& nb)
{
 _temps=nb;
}
0
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
18 juin 2007 à 10:51
Sinon j'ai une autre classe
C'est un tableau de Station
Le but est de trier le tableau par rapport au temps

std::vector<Station> fusion(std::vector<Station> Tab,int debut,int milieu,int fin)

 int i=debut;
 int j=milieu;
 while((i<milieu)&&(j<fin)) {
  if(Tab[i].getemps()>Tab[j].getemps()) {
   permuter(Tab,i,j);
   j++;
  }
  else {
   i++;
  }
 }
 return Tab;
}


void trifusion(std::vector<Station> Tfin,int deb,int fin)  
{
 if(deb<fin) {
  int m=(deb+fin)/2;
  trifusion(Tfin,deb,m);  
  trifusion(Tfin,m,fin);  
  fusion(Tfin,deb,m,fin);  
 }
}


double maxi(double a,double b)
{
 if(a>b) return a;
 else return b;
}


std::vector<Station> CalculeTempsTraitement(std::vector<Station> Tps) 
{
 double _tpstransport1=10.00002;
 double _tpstransport2=12.043121; 
 int j,nbpers,nbpiece;
 j=0;
 nbpers=1;
 nbpiece=3;
 std::vector<double> Tx1,Tx2,T; 
 for(unsigned i=0;i<Tps.size();i++) {
  if(j<nbpers) Tx1[i]=Tps[i].getemps()+_tpstransport1;
  //else Tx1[i]=maxi(Tps[i].getemps()+_tpstransport1,Tx2[i-nbpers]);  
  Tx2[i]=Tx1[i]+nbpiece*T[i];
  double a= Tx2[i]+_tpstransport2;
  Tps[i].Setemps(a); 
 }
 //trifusion(Tps,0,Tps.size()-1); 
 return Tps;
}


std::vector<Station> CalculeTempsSansTraitement(std::vector<Station> Temps)
{
 double _tpstransport=10.214564;
 for(unsigned k=0;k<Temps.size();k++) {
  double a=Temps[k].getemps()+_tpstransport;
  Temps[k].Setemps(a);
 }
  return Temps;
}


Aze::Aze():_Aze(0)
{
}


Aze::Aze(const Aze &a)
{
 _Aze=a._Aze;
 
}


Station& Aze::getStation(int idx)
{
 return _Aze[idx];
}


void fusion1(std::vector<Station> Tab, Station& s) {
 Tab[Tab.size()].SetCommande(s.getCommande());
 double a=s.getemps();
 Tab[Tab.size()].Setemps(a);
 //trifusion(Tab,0,Tab.size());
}


void Aze::Choix(std::vector<Station>& Tab,int s)
{
 std::vector<Station> Traitement,Tab_Sans_Traitement;
 for(int i=0;i<6;i++) {
  for(unsigned j=0;j<Tab.size();j++) {
   int c=Tab[j].getCommande().GetG(i);
   if(c==0) {
    fusion1(Traitement,Tab[j]);
    CalculeTempsSansTraitement(Traitement);
   }
   else {
    fusion1 (Tab_Sans_Traitement,Tab[j]);
    CalculeTempsTraitement(Tab_Sans_Traitement);
   }
  }
 }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
18 juin 2007 à 11:27
Mon problème est quand j'appelle la méthode choix.
Elle l'est plus quand je fais un push_back
0
lenanttais44 Messages postés 34 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 7 février 2008
18 juin 2007 à 11:35
C'est ma méthode fusion1 qui n'est pas bonne
je pense que l'allocation est mal faite

void fusion1(std::vector<Station> Tab, Station& s) {
 Tab[Tab.size()].SetCommande(s.getCommande());
 double a=s.getemps();
Tab.resize(Tab.size()+1);                  mon erreur
 Tab[Tab.size()].Setemps(a);            mon erreur
 //trifusion(Tab,0,Tab.size());
}
0
Rejoignez-nous