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;
}

Citation Envoyé par gcc
Euler.hpp:12: error: `Y' undeclared (first use this function)
Euler.hpp:12: error: (Each undeclared identifier is reported only once for each function it appears in.)
Euler.hpp:12: error: `dt' undeclared (first use this function)
Euler.hpp:12: error: there are no arguments to `dY' that depend on a template parameter, so a declaration of `dY' must be available
Euler.hpp:12: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
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, ...

Je voudrais savoir où est-je commis une erreur.

Merci à tous ceux qui lirons et répondrons.