Variable et méthodes statiques, comment faire ?

Résolu
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 28 août 2005 à 11:59
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 28 août 2005 à 14:10
Bonjour tout le monde !

Je suis actuellement de me lancer dans la réalisation d'un jeu utilisant directX. Pour avoir une base de temps en fonction de la rapidité de l'ordinateur sur lequel s'exécute le programme j'ai réalisé une classe CFps utilisant les méthodes QueryPerformanceFrequency et QueryPerformanceCounter pour déterminer le temps écoulé entre deux images.

Sa marche très bien. Le problème est que je voulai par la suite que cette base de temps soit accessible depuis n'importe quelle classe, et ne pas avoir à donner l'adresse d'une instance de CFps à chaque création de classe. Ayant déjà codé quelque chose de similaire en java je me suis dit que j'allai procéder de la même manière et allai mettre ma classe en static. J'ai donc d'abord essayé de mettre une seule variable statique:



<HR>
class CFps
{
private:
LARGE_INTEGER ticksPerSecond;
LARGE_INTEGER lastTicks;
static float delta;
float fps;
float totalDelta;


void displayFpsInfos();
Public:
void init();
void refresh();
};

<HR>

La méthode refresh modifi delta.
Ce genre de truc marchait en java, mais je n'ai jamais fait de static en c++. Actuellement j'ai un problème lors du linkage:
fps.obj : error LNK2001: unresolved external symbol "private: static float CFps::delta" ...

Merci pour votre aide

neodelphi

2 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
28 août 2005 à 13:49
C'est comme une variable globale, il faut la définir (dans un .cpp) :



float CFps::delta = ... ;



Par rapport à Java, tu peux aussi utiliser un namespace. Renseignes toi
aussi sur le design pattern "singleton", ca peut te convenir.
3
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
28 août 2005 à 14:10
Merci àa fonctionne en mettant également la déclaration dans le cpp, bien que je n'en voit pas l'intéret à part de faire fonctionner mon projet.
J'ai jetté un oeil sur le singleton desing patern, mais je préfère le faire en statique ce qui me permettra de faire CFps::getDelta à n'importe quel endroit du code.

neodelphi
0
Rejoignez-nous