我正在使用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是一个{Title}头部私有的static void
函数,在实现文件中定义为只是通过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
或正确宣布。任何帮助表示赞赏。感谢。
P.S。当我使用BoostPro安装程序时,我只安装了单线程的东西而没有安装多线程的东西。这可能是它无法正常工作的原因吗?我读到当库以不同方式链接时可能会发生链接器问题。如果这可能是一个问题,我将补充说我也在使用SFML库。
答案 0 :(得分:2)
答案 1 :(得分:0)
我不确定问题是什么。一切都是#included或声明正确。任何帮助表示赞赏。感谢。
这只意味着编译器找到了声明。但链接器必须找到符号的定义。 (参见this SO问题声明和定义之间的区别。)您需要提供库。如果您使用的是GCC,请按Phong's advice。