2013-06-26 3 views
-1

나는 다음과 같은 코드를 가지고 : 한 개체 클래스를 initilaising 때벡터 C++

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

, 나는 나 또한 v_.push_back로 시도 다음 코드

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

를 실행합니다 (& 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) (또는 선택적으로 [Boost 함수 라이브러리] (http : // www. boost.org/doc/libs/1_53_0/doc/html/function.html)). –

+1

'v_.push_back (& ​​A :: memberFunction)을 사용하면 gcc가 4.7.3 – mirk

+0

으로 작동합니다. Clang과 오크. 이상한. – user1018513

답변

1

또한 v_.push_back (& :: memberFunction)와 함께 노력했다.

나는 어떤 포럼인지 모르겠다. 멤버에 대한 포인터를 만드는 것은 유효한 구문이 하나 뿐이며 & 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; 
} 

전체 컴파일하지 예를 게시하시기 바랍니다, 문제는 다른 곳에 숨겨해야합니다

+0

위와 같이 표시했지만 여전히 동일한 오류가 발생합니다. 나는 CLang을 사용하는 것으로 제한되어 있으며, GCC로 잘 작동하는 것 같다. – user1018513

+1

완전한 예제가 없으면 당신을 도울 수 없다. –

1

이 코드는 @ 발 로그 - 친구가 말했다으로, &classname::membername 전에 필수입니다 (LLVM/연타 4.2에서 컴파일