J'utilise boost::function
pour activer le passage d'une fonction à un constructeur Button
afin qu'il contienne cette fonction. Appelez-le chaque fois qu'il est activé.symbole externe non résolu "public: void __thiscall ..."
typedef boost::function< void() > Action;
Dans mon TitleState j'ai construit un bouton comme celui-ci.
m_play(
ButtonAction, // This is where I pass a function to Button's Action argument
sf::Vector2f(500, 400),
sf::IntRect(500, 400, 700, 500)
)
où ButtonAction est une fonction static void
privée dans l'en-tête de TitleState, défini dans le fichier de mise en œuvre simplement la sortie à la console via std :: Cout (comme un test pour savoir si elle fonctionne).
Dans mon code, si la souris clique sur un bouton dans la fonction HandleEvents
de TitleState, le programme appelle la fonction Activate
du bouton qui ressemble à ceci.
void Button::Activate() const {
m_action(); // m_action is the Action member that holds the ButtonAction I passed earlier
}
Le problème est que, lorsque le programme essaie de lier je reçois cette erreur ....
unresolved external symbol "public: void __thiscall Button::Activate(void)" ([email protected]@@QAEXXZ) referenced in function "public: virtual void __thiscall TitleState::HandleEvents(void)" ([email protected]@@UAEXXZ)
Je ne suis pas sûr de ce que le problème est d'ailleurs que l'éditeur de liens peut » t trouver la définition de la fonction. Tout est #included
ou déclaré correctement. Toute aide est appréciée. Merci.
P.S. Lorsque j'ai utilisé le programme d'installation de BoostPro, j'ai seulement installé le matériel à un seul thread et aucun des composants multi-thread. Cela pourrait-il être une raison pour laquelle cela ne fonctionne pas? J'ai lu que les problèmes de liens peuvent se produire lorsque les bibliothèques sont liées de différentes manières. Si cela peut être un problème, j'ajouterai que j'utilise aussi la bibliothèque SFML.
Ce n'est pas le problème. Les bibliothèques sont liées. – Person
Non, ils ne le sont pas. Si c'était le cas, l'éditeur de liens mentirait. Et les linkers ne le font pas. – sbi
Dans les propriétés du projet, sous lieur, sous les répertoires de bibliothèque supplémentaires, j'ai mis en C: \ boost_1_42 \ lib C'était toute la documentation de boost a été nécessaire lors de la liaison en utilisant VC++. – Person