我需要在我的程序中使用綁定和函數。但不幸的是,vs2010無法鏈接我的程序。 我用下面的例子自boost ::綁定文件boost函數和綁定外部符號
#include <boost\bind.hpp>
#include <boost\function.hpp>
#include <functional>
class button
{
public:
boost::function<void()> onClick;
};
class player
{
public:
void play();
void stop();
};
button playButton, stopButton;player thePlayer;
void connect()
{
playButton.onClick = boost::bind(&player::play, &thePlayer);
stopButton.onClick = boost::bind(&player::stop, &thePlayer);
}
void main(int argc, char* argv[])
{
connect();
}
錯誤1錯誤LNK2019:無法解析的外部符號 「市民:無效__thiscall球員::停止(無效)」(?停止@球員@@ QAEXXZ)在函數引用「空隙__cdecl連接(無效)」(?連接@@ YAXXZ)
我試圖BoostPro的最新32和64優化版本和遵循本教程http://www.youtube.com/watch?v=5AmwIwedTCM.All但VS仍然產生相同的錯誤...
V S2010項目設置包括/庫路徑 https://dl.dropbox.com/u/47585151/vs.png
但是當我打開
連接器 - >常規 - > ShowProgress - >對於搜索庫(/ VERBOSE:LIB)
我注意到VS正在搜索這些庫中定義的
鏈接器 - >輸入 - >其他依賴關係
是可以檢查其.LIB提振需求的boost ::綁定和boost ::作用下VS2010?
我只是將函數體添加到函數void play(){};它神奇地開始工作。你能解釋爲什麼它很重要,爲什麼它會產生鏈接錯誤? – user1075940
@user:我認爲你需要[一本好書](http://tinyurl.com/so-cxxbooks)解釋這一點。當你在任何地方做'void play()'時,基本上會發生這樣的情況:你告訴編譯器,在最終的程序中某個名爲「play」的函數存在*某處*,但是你還不知道它到底在哪裏。鏈接器的工作是找到這個函數(一個*無法解析的外部符號*)並解析所有對它的引用(如在'player :: connect'中)到那個函數。您沒有在任何地方實現「play」(* defined *),因此鏈接器無法解析引用。 – Xeo