Bonjour a tous.

J'ai un Td de progra sous le coude est je un peu de mal a m'en dépatouiller. Il me reste une derniere erreur lors de la compilation que je ne comprends vraiment pas. Si vous pouviez y jeter un oeil .

Bref topo :
On a un ensemble de particules, chacun d'entre-elle repérée par leur position OM(X, Y, Z), leur vitesse v(Vx, Vy, Vz), la force qu'elle subissent F(Fx, Fy, Fz) et leur masse m. Le systeme est donc mis dans un pointeur de Particule.
Particule etant la structure suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Particule
{
       double X;
       double Y;
       double Z;
       double Vx;
       double Vy;
       double Vz;
       double Fx;
       double Fy;
       double Fz;
       double m;
};
J'ai donc trois fichier dans mon projet : Fonctions.h - Fonction.cpp - Main.cpp
Dans Fonction.cpp, je definie :
-deux fonctions (Particule renvoieUneParticule() - Particule* saisieDistribution(int n) qui permettent de definir aléatoirement les informations sur la position, la vitesse et la masse de chaque particule de mon pointeur.
-quatre fonctions pour calculer l'energie cinetique, potentielle, la distance entre deux particule etc...


Reste 2 dernieres fonctions, et se sont elles qui me posent un probleme :
-void calculeForces(int n, Particule *pts) : dans celle-ci on doit calculer la force subie par chaque particule et se sont donc les composantes F de la structure de chaque particule qui seront modifié => passage par reference du pointeur Particule *pts n'est-ce pas ?

-void nouvelleDistribution(int n, Particule *pts) : "celle-ci doit modifier les coordonnées et les vitesses des particules. Pous cela :
on appelle la fonction calculeForces
ensuite, et pour chaque particule, on recalcule les coordonnées et les vitesses grace aux equa-diff :
OM(t+dt)=OM(t)+v(t)*dt
v(t+dt)=v(t)+(F/m)*dt avec dt=0.0001"

Voici donc mes deux fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
void calculeForces(int n, Particule*&pts)
{
     for(int i=0; i<n; i++)
     {
             for(int j=0&&j!=i; j<n; j++)
             {
                     pts[i].Fx=(pts[i].X-pts[j].X)*((12.0/pow(distance2particules(pts[i], pts[j]),14))-(12.0/pow(distance2particules(pts[i],pts[j]),8)));
                     pts[i].Fy=(pts[i].X-pts[j].X)*((12.0/pow(distance2particules(pts[i], pts[j]),14))-(12.0/pow(distance2particules(pts[i],pts[j]),8)));
                     pts[i].Fz=(pts[i].X-pts[j].X)*((12.0/pow(distance2particules(pts[i], pts[j]),14))-(12.0/pow(distance2particules(pts[i],pts[j]),8)));
             }
     }
}
Cette longue formule est en fait celle qui m'est donnée dans l'énoncé (et que je ne vais pas vous écrire ici ) permettant de calculer les composantes de la force F.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void nouvelleDistribution(int n, Particule*&pts)
{
     calculeForces(n, pts);
     for(int i=0; i<n; i++)
     {
             pts[i].X=pts[i].X+pts[i].Vx*0.0001;
             pts[i].Y=pts[i].Y+pts[i].Vy*0.0001;
             pts[i].Z=pts[i].Z+pts[i].Vz*0.0001;
             pts[i].Vx=pts[i].Vx+(pts[i].Fx*0.0001)/pts[i].m;
             pts[i].Vy=pts[i].Vy+(pts[i].Fy*0.0001)/pts[i].m;
             pts[i].Vz=pts[i].Vz+(pts[i].Fz*0.0001)/pts[i].m;
     }
}

Et voici donc ce que j'obtient lors de la compilation :
[Linker error] undefined reference to `nouvelleDistribution(int, Particule*)'
ld returned 1 exit status
C:\Clement\boulot\Cpp\TP6\Makefile.win [Build Error] [TP6A.exe] Error 1
Je pense que le probleme viens du passage par reference que j'effectue deux fois de suite. Mais j'ai eu beau chercher pendant longtemps et je n'ai rien trouvé.



Siouplé .
Merci d'avance pour vos reponse.