Bonjour,
Dans le cadre du développement d'un moteur physique je suis en train de mettre en place l'organisation des résolutions numérique (Euler, RK2, RK4, ...)... Pour ce faire je code une classe abstraite :
NumericalSolver.h
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #ifndef __NUMERICALSOLVER_H__ #define __NUMERICALSOLVER_H__ #include "Vector3D.h" namespace VM { template <class T> class NumericalSolver { public://protected : NumericalSolver(T (*f)(T, T), T, T); virtual ~NumericalSolver(); T (*dY) (T, T); // dy/dt T Y; // y T dt; // différentiel de temps public : virtual void Next() = 0; // Calculer la position suivante }; #include "NumericalSolver.hpp" } #endif
NumericalSolver.hpp
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 template <class T> NumericalSolver<T>::NumericalSolver(T (*f)(T, T), T dt, T y) : dY(f), dT(dt), Y(y) { }
Jusqu'ici je n'est pas de problème mais lorsque j'ai une classe héritière par exemple Euler.h
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef __EULER_H__ #define __EULER_H__ #include "NumericalSolver.h" namespace VM { template <class T> class Euler : public NumericalSolver<T> { public : Euler(); virtual ~Euler(); void Next(); // Y(n+dt) }; #include "Euler.hpp" } #endif
Euler.hpp
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 template <class T> Euler<T>::Euler() : NumericalSolver<T>(NULL, 0.01, 0) {} template <class T> Euler<T>::~Euler() {} template <class T> void Euler<T>::Next() { Y += dY(Y, dt)*dt; }
J'ai essayé de codé l'instance de la fonction Euler<T>::Next() directement dans la classe mais toujours le problème du gcc ne voit pas mon Y, mon dt, ...Envoyé par gcc
Je voudrais savoir où est-je commis une erreur.
Merci à tous ceux qui lirons et répondrons.
Partager