Référence indéfinie? Y at-il quelque chose que je ne vois pas? (C ++, classe singleton)
Question
Je ne peux pas sembler faire cette référence non définie disparaître.
J'ai ce code dans la section privée de Scene.h:
static Scene * scene_;
Il y a un #include « Scene.h » à la première partie de l'en-tête de Scene.cpp
Ceci est la seule erreur que je reçois en ce moment, des idées?
Je vais fournir toute autre information que vous voulez.
La solution
Lorsque vous déclarez un membre statique, vous devez également définir dans une unité de compilation (et un seul):
// a.h
class A
{
static int x;
};
// a.cpp
int A::x = 0;
La déclaration de la variable dans la classe ne réservera pas la mémoire, il suffit de dire le compilateur (à partir d'autres unités de compilation) qu'il y aura une variable accessible par ce nom défini quelque part.
Autres conseils
Pourquoi utiliser un Scene*
au lieu d'un Scene
? Vous dites essentiellement « utiliser static
d'allouer suffisamment d'espace pour un pointeur vers un Scene
», puis au moment de l'exécution vous mettez cet objet Scene
sur le tas avec new
(et, je suppose, jamais delete
il).
Au lieu de cela, tout simplement avoir statique allouent initialize l'objet Scene
:
static Scene scene_;
puis changer toutes les références à la scène en conséquence (-.> Devient):
scene_.addObject(&object);
Il est plus facile et prend moins de frappes pour démarrer. C ++ ne nécessite pas new
aussi souvent que Java ou C #.