erreur LNK2001: symbole externe non résolu "private: static static
erreur LNK2001: symbole externe "private: static de la classe irrklang::ISoundEngine * GameEngine::Audio::_soundDevice" (?_soundDevice@Sound@GameEngine@@0PAVISoundEngine@irrklang@@A)
Je ne peux pas comprendre pourquoi je reçois cette erreur. Je crois que je suis l'initialiser correctement. Quelqu'un peut-il donner un coup de main?
son.h
class Sound
{
private:
static irrklang::ISoundEngine* _soundDevice;
public:
Sound();
~Sound();
//getter and setter for _soundDevice
irrklang::ISoundEngine* getSoundDevice() { return _soundDevice; }
// void setSoundDevice(irrklang::ISoundEngine* value) { _soundDevice = value; }
static bool initialise();
static void shutdown();
sound.cpp
namespace GameEngine
{
Sound::Sound() { }
Sound::~Sound() { }
bool Sound::initialise()
{
//initialise the sound engine
_soundDevice = irrklang::createIrrKlangDevice();
if (!_soundDevice)
{
std::cerr << "Error creating sound device" << std::endl;
return false;
}
}
void Sound::shutdown()
{
_soundDevice->drop();
}
et où j'utilise le son de l'appareil
GameEngine::Sound* sound = new GameEngine::Sound();
namespace GameEngine
{
bool Game::initialise()
{
///
///non-related code removed
///
//initialise the sound engine
if (!Sound::initialise())
return false;
Toute aide serait grandement appréciée
source d'informationauteur rkleman12 | 2013-04-17
Vous devez vous connecter pour publier un commentaire.
Mettre en
sound.cpp
:REMARQUE: Vous pourriez vouloir initialiser ainsi, par exemple:
static
mais nonconst
membres de données doit être définie en dehors de la définition de la classe et à l'intérieur de l'espace de noms englobant de la classe. La pratique habituelle consiste à définir dans l'unité de traduction (*.cpp
), car il est considéré comme un détail d'implémentation. Seulementstatic
etconst
les types intégraux peuvent être déclarées et définies dans le même temps (à l'intérieur de la définition de la classe):dans ce cas, vous n'avez pas besoin d'ajouter
x
définition, car elle est déjà définie à l'intérieur de la définition de la classe. Cependant, dans votre cas, il est nécessaire. Extrait de section 9.4.2 de la Norme C++:Finalement, la réponse donnée par @Alexandre résolu un problème similaire dans mon propre code, mais pas sans un peu d'essais. Pour le bénéfice de la prochaine visiteur, quand il dit: "Mettre en sound.cpp" pour être parfaitement clair, c'est en plus de ce qui est déjà présent dans le son.h.