Variable et méthodes statiques, comment faire ? [Résolu]

Signaler
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008
-
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008
-
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

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
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.
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

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