関数をコンストラクターboost::function
に渡して、その関数を保持できるようにするために使用しています。Button
それがアクティブ化されるたびにそれを呼び出します。
typedef boost::function< void() > Action;
TitleStateで、このようなボタンを作成しました。
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 )
)
ここで、ButtonActionは、static void
TitleStateのヘッダーに非公開で保持されている関数であり、実装ファイルでstd :: coutを介してコンソールに出力するだけであると定義されています(動作しているかどうかのテストとして)。
私のコードでは、TitleStateのHandleEvents
関数でマウスがボタンをクリックすると、プログラムはそのボタンのActivate
関数を次のように呼び出します。
void Button::Activate() const {
m_action(); // m_action is the Action member that holds the ButtonAction I passed earlier
}
問題は、プログラムがリンクしようとすると、このエラーが発生することです。
unresolved external symbol "public: void __thiscall Button::Activate(void)" (?Activate@Button@@QAEXXZ) referenced in function "public: virtual void __thiscall TitleState::HandleEvents(void)" (?HandleEvents@TitleState@@UAEXXZ)
リンカが関数の定義を見つけられないこと以外に、何が問題なのかわかりません。すべてが#included
適切に宣言されているか、宣言されています。どんな援助も大歓迎です。ありがとう。
PS BoostProインストーラーを使用したとき、私はシングルスレッドのものだけをインストールし、マルチスレッドのものはインストールしませんでした。これが機能しない理由でしょうか?ライブラリがさまざまな方法でリンクしている場合、リンカーの問題が発生する可能性があることを読みました。これが問題になる可能性がある場合は、SFMLライブラリも使用していることを追加します。