未解决的外部符号“public:void __thiscall ...”

时间:2010-02-20 14:19:38

标签: c++ boost boost-function

我正在使用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库。

2 个答案:

答案 0 :(得分:2)

在链接程序时添加库选项:

克++:

g++ -L/your/library/path -lyour_library_name

VC ++:

答案 1 :(得分:0)

  

我不确定问题是什么。一切都是#included或声明正确。任何帮助表示赞赏。感谢。

这只意味着编译器找到了声明。但链接器必须找到符号的定义。 (参见this SO问题声明和定义之间的区别。)您需要提供库。如果您使用的是GCC,请按Phong's advice