Я использую boost::function
, чтобы включить передачу функции в конструктор Button
, чтобы он удерживал эту функцию. Вызов его всякий раз, когда он активирован.неразрешенный внешний символ «public: void __thiscall ...»
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, определённый в файле реализации, просто выводит на консоль с помощью станд :: соиЬ (так же, как испытание для того, что он работает).
В моем коде, если мышь нажимает кнопку в функции 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)" ([email protected]@@QAEXXZ) referenced in function "public: virtual void __thiscall TitleState::HandleEvents(void)" ([email protected]@@UAEXXZ)
Я не уверен, что проблема в том, кроме того, что компоновщик может» t найти определение функции. Все - #included
или объявлено правильно. Любая помощь приветствуется. Благодарю.
P.S. Когда я использовал установщик BoostPro, я установил только однопоточный материал и ни один из многопоточных материалов. Может быть, это причина, почему она не работает? Я читал, что проблемы с компоновщиками могут возникать, когда библиотеки связываются по-разному. Если это может быть проблемой, я добавлю, что я также использую библиотеку SFML.
Это не проблема. Библиотеки связаны. – Person
Нет, это не так. Если бы они были, линкер лежал бы. И линкеры этого не делают. – sbi
В свойствах проекта, в разделе Linker, в дополнительных каталогах библиотек, я добавил C: \ boost_1_42 \ lib Это была вся необходимая документация, которая требовалась при связывании с использованием VC++. – Person