Я использую 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 (просто для проверки работоспособности).
В моем коде, если мышь нажимает кнопку в функции HandleEvents
TitleState, программа вызывает функцию 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
или объявлено правильно. Любая помощь приветствуется. Спасибо.
P.S. Когда я использовал установщик BoostPro, я устанавливал только однопоточные компоненты, но не многопоточные. Может ли это быть причиной, почему это не работает? Я читал, что проблемы компоновщика могут возникать, когда библиотеки связываются по-разному. Если это может быть проблемой, я добавлю, что я также использую библиотеку SFML.