-1

次のコードがあります。

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

クラス 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>'

誰かが私がどこで間違っているのか知っていますか?

4

2 に答える 2

1

v_.push_back(&A::memberFunction) も試してみましたが、これは私にとってより論理的であると思われましたが、フォーラムでは反対されました。

それらがどのフォーラムだったのかわかりません。メンバーへのポインターの形成には、有効な構文が 1 つあります& classname::membername。すべての要素が必須です。

問題が解決しない場合は、一貫して使用し、そのバージョンのコードとエラー メッセージを投稿してください。

于 2013-06-26T08:52:15.610 に答える
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;
}

コンパイルしていない完全な例を投稿してください。問題は別の場所に隠されている必要があります。

于 2013-06-26T10:39:44.117 に答える