2013-06-26 77 views
-1

我有以下代碼:矢量C++

 typedef bool (A::*rule)(shared_ptr<Node >, shared_ptr<Node>) ; 

initilaising A類對象時,我運行下面的代碼

 v_ = vector<rule>(); 
     v_.push_back(A::memberFunction); 

我還試圖與v_.push_back( & A :: memberFunction),因爲這對我來說似乎更合乎邏輯,但是在論壇上反對 。我也得到一個錯誤信息

這是由對此事的許多議題建議。但是,我收到以下錯誤

 non-const lvalue reference to type 'value_type' (aka 'bool (boost::shared_ptr<Node>, boost::shared_ptr<Node>)') 
    cannot bind to a temporary of type '<bound member function type>' 

有誰知道我要去哪裏錯?

+0

考查['的std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)(或任選[升壓功能庫](HTTP:// WWW。 boost.org/doc/libs/1_53_0/doc/html/function.html))。 –

+1

使用'v_.push_back(&A :: memberFunction)'對我的作品與海灣合作委員會似乎爲w 4.7.3 – mirk

+0

嗯不與Clang合作。奇。 – user1018513

回答

1

我也試圖與v_.push_back(& A :: memberFunction),因爲這似乎更符合邏輯的我,但反對在論壇上建議。

我不知道是什麼論壇是那些。形成指向成員的指針有一個有效的語法,它是& classname::membername。所有元素是強制性

使用一貫和崗位代碼和錯誤消息該版本應該問題仍然存在。

+0

做到了,如上所述,但仍然獲得相同的錯誤。我限制使用CLang,似乎與GCC – user1018513

+1

工作正常,我們不能幫你沒有一個完整的例子來看看 –

1

此代碼下LLVM /鐺4.2編譯(如@巴洛格-PAL表示,&是強制性classname::membername前:

#include <memory> 
#include <vector> 

struct Node {}; 
struct A 
{ 
    bool rule(std::shared_ptr<Node>, std::shared_ptr<Node>) 
     {return true;} 
}; 

typedef bool (A::*rule)(std::shared_ptr<Node>, std::shared_ptr<Node>); 

int main(int, const char**) 
{ 
    std::vector<rule> v; 
    v.push_back(&A::rule); 
    return 0; 
} 

請張貼一個完整的沒有編譯例如,您的問題必須在別處隱藏。