Неразрешенный внешний символ "public: void __thiscall..."
Я использую 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.
2 ответа
Добавьте опцию библиотеки, когда вы связываете свою программу:
г ++:
g++ -L/your/library/path -lyour_library_name
VC++:
Я не уверен, в чем проблема. Все включено или заявлено правильно. Любая помощь приветствуется. Благодарю.
Это просто означает, что компилятор находит объявление. Но компоновщик должен найти определения символов. (См. Этот вопрос о разнице между объявлением и определением.) Вам необходимо предоставить его вместе с библиотекой. Если вы используете GCC, следуйте советам Фонга.