Bonjour à tous,
Je suis actuellement en train de développer un projet basé sur le rubik's cube. Mon cube est décomposé en unité (26 + celle du centre) et sont texturées (le tout étant développé en OpenGL). Sachant que toutes ces unités partagent les mêmes textures, j'ai une variable statique dans ma classe CRcdUnit (classe d'une unité du cube) qui n'est autre qu'un tableau de pointeurs sur une class CTexImage. Voici à quoi ressemble ces deux classes:
La fonction CRcdUnit::loadTextures permet tout simplement (comme son nom l'indique :p) de charger les textures.
Code : 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
25
26
27
28 class CTexImage { public: CTexImage(void); CTexImage(const char *); ~CTexImage(void); private: //toutes les données nécessaire à la génération d'une texture. }; class CRcdUnit { public: CRcdUnit(float, float, float); ~CRcdUnit(void); static bool loadTextures(void); private: static CTexImage **m_ppTextures; private: //toutes les autres variables nécessaires. }; CTexImage **CRcdUnit::m_ppTextures = NULL;
Voila, alors quand je compile (avec Visual .NET) j'obtiens une erreur de linkage m'expliquant que m_ppTextures existe deja (error LNK2005 de mémoire). Y a-t-il une façon particulière d'initialiser des membres statiques pointeurs ? Je ne vous cache pas que j'ai pas énormément chercher non plus, car il était 4h du mat et que je suis actuellement au travail (rohhh c'est pas bien ca :p).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 bool CRcdUnit::loadTextures(void) { bool res = true; m_ppTextures = new CTexImage[MAX_TEXTURES]; res &= ((m_ppTextures[0] = new CTexImage("image0.tga")) != NULL); res &= ((m_ppTextures[0] = new CTexImage("image1.tga")) != NULL); // ... //vérification de res et libération des ressources utilisées si = false. return res; }
Si quelqu'un à une idée du problème...
Merci à tous
Olivier.
Partager