我有以下代码:
typedef bool (A::*rule)(shared_ptr<Node >, shared_ptr<Node> ) ;
在初始化A类对象时,我运行以下代码
v_ = vector<rule>();
v_.push_back(A::memberFunction);
我也试过v_.push_back(&amp; 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 :(得分:1)
我也试过v_.push_back(&amp; A :: memberFunction),因为这对我来说似乎更合乎逻辑,但在论坛上被建议反对。
我不知道那些论坛是什么。形成指向成员的指针有一个有效的语法,它是& classname::membername
。所有要素都是强制性的。
如果问题仍然存在,请始终如一地使用该版本并发布该版本的代码和错误消息。
答案 1 :(得分:1)
此代码在llvm / clang 4.2下编译(正如@ balog-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;
}
请发布一个完整的非编译示例,您的问题必须隐藏在其他地方。