j'ai une classe statique complète, en utilisant un std :: carteproblème en utilisant la variable statique dans une fonction statique
c'est le cas simplifié
.h
#ifndef KEYBOARD_H
#define KEYBOARD_H
#include <map>
class Keyboad {
static std::map<char, bool> pressed;
static void keyPressedEvent(char _key);
};
#endif
Cpp
#include "Keyboard.h"
void Keyboard :: keyPressedEvent(char _key) {
Keyboard :: pressed[_key] = true;
}
, mais il y a un problème avec la variable membre statique, parce que je reçois
Undefined symbols:
"Keyboard::pressed", referenced from:
__ZN15Keyboard7pressedE$non_lazy_ptr in Keyboard.o
(maybe you meant: __ZN15Keyboard7pressedE$non_lazy_ptr)
ld: symbol(s) not found
collect2: ld returned 1 exit status
quand je l'enlève, il fonctionne ok
pourquoi puis-je obtenir ce problème, il devrait y avoir aucun problème lors de l'utilisation statique variables:/
grâce
mais pourquoi, quand c'est déjà déclaré dans la classe Keyboad que j'inclus? –
@Peter, il est déclaré dans votre classe, mais pas * défini *. –
@Peter: Pensez au fichier d'en-tête comme une * description * de ce que votre classe "inclut" (ceci s'appelle * declaration *). Il suffit de vous laisser compiler le code, mais pour le lier dans un exécutable, vous devez également "produire les biens réels". C'est ce que fait la ligne supplémentaire ci-dessus (ceci s'appelle * définition *). – Jon