2011-11-17 272 views
2

INFO

我想使用boost :: function來傳遞迴調參數,就像這樣:boost :: VS2010中的函數:錯誤C2039:'function':不是'boost'的成員

void ReadPacket(
     boost::function<void (const boost::system::error_code&, Packet* p)> callback); 

,然後使用它:

ReadPacket(boost::bind(
    &ServerSession::storePacket, 
    this, 
    _1, 
    _2 
    )); 

畢竟後回調鏈我叫

callback(ec, packet); 

問題

我剛剛編譯解決方案調試,一切看起來OK ...

發行我得到了很多錯誤的上述

BasicSession.h(30): error C2039: 'function' : is not a member of 'boost' 
BasicSession.h(30): error C2061: syntax error : identifier 'function' 
BasicSession.h(30): error C2059: syntax error : ')' 
BasicSession.h(30): error C2143: syntax error : missing ')' before ';' 

提到我很困惑和失望。

SUGGESTION

我發現,有是在boost::function不同的語法。例如boost::function0boost::function1。這是由於VS2010不支持的東西(我不知道究竟是什麼)

我是對的嗎?

我還需要將此應用程序作爲可移植和跨平臺的應用程序。

提升1.47和VS2010

+0

MSVC10不支持* variadic模板*。任何僞造可變行爲的東西(比如'bind')都必須使用一些骯髒的詭計。 –

+0

@kerrekSB so ...我應該怎麼做,如果我想使用傳遞迴調函數作爲參數的方法。就像在ASIO做的一樣。 – nix

+1

不知道,對不起:-)聽起來這是一個MSVC的具體問題。我確信有編譯器經驗的人會很快發佈一些有用的東西! –

回答

3

在情況下,如果你已經錯過了,這裏是升壓功能的tutorial。如果你看看教程,它將列出'首選'和'便攜'語法。既然你想要代碼是可移植的,你可能想選擇後者。

+0

thx。我已經發現了它。這就是答案?只使用function1? – nix

+0

但該教程指出Visual C++ 7.1及更高版本*支持「首選」語法。 – ruakh

+0

@ruakh同意。奇怪的是,上面的代碼在Degug中編譯,但不在Release中 – nix

2

的解決方案是boost::function4

+1

歡迎光臨:)一般來說,我們希望得到一個答案,不僅提供解決方案,而且還解釋問題所在。這可能意味着冗長的回答......但這就是讓人們接受教育的方式,以便下次他們不需要*。 –

+0

好吧,我會盡我所能:) –

+0

@RomanKr我喜歡這個簡短的答案,但是,1.爲什麼它在VS2010中編譯調試,而不是在發佈。並說:教程說,Visual C++ 7.1和更高版本確實支持「首選」語法。什麼意思? – nix

相關問題