2012-10-04 33 views
0

我需要在我的程序中使用綁定和函數。但不幸的是,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正在搜索這些庫中定義的

鏈接器 - >輸入 - >其他依賴關係

http://pastebin.com/BCpEt8Zq

是可以檢查其.LIB提振需求的boost ::綁定和boost ::作用下VS2010?

回答

1

這個問題與任何提升庫無關(都是隻有頭文件)。嘗試只需致電startstopconnect內,你應該得到相同的錯誤。仔細閱讀它,它會告訴你缺少什麼。

+0

我只是將函數體添加到函數void play(){};它神奇地開始工作。你能解釋爲什麼它很重要,爲什麼它會產生鏈接錯誤? – user1075940

+1

@user:我認爲你需要[一本好書](http://tinyurl.com/so-cxxbooks)解釋這一點。當你在任何地方做'void play()'時,基本上會發生這樣的情況:你告訴編譯器,在最終的程序中某個名爲「play」的函數存在*某處*,但是你還不知道它到底在哪裏。鏈接器的工作是找到這個函數(一個*無法解析的外部符號*)並解析所有對它的引用(如在'player :: connect'中)到那個函數。您沒有在任何地方實現「play」(* defined *),因此鏈接器無法解析引用。 – Xeo

相關問題