2016-07-16 2 views
0

를 작동하려면 :지정 기능 그러나 나는 오류가 점점 오전, 나는 현재 함수 포인터를 정의하고 함수가 정의와 일치처럼 나에게 보인다 포인터

1 IntelliSense: a value of type "std::string (RSSCrawler::)(const web::json::value &headlines)" cannot be assigned to an entity of type "std::string ()(const web::json::value &headlines)"

내가 잘못이 무엇인지 확실하지 않다, 그러나 여기 내 코드

string(*GetHeadline)(const value&headlines); 
GetHeadline = Extract; 


string RSSCrawler::Extract(const value &headlines) 
{ 
    return ""; 
} 
+3

일반 함수 포인터가없는 멤버 함수 포인터 ... 다른 함수의 인수로를 선언 할 때 그 const -correctness을 제외하고, 함수 포인터의 목적을 패배 생각합니다. 후자를 연구하십시오. –

+1

Extract는 멤버 함수입니다. GetHeadline은 비 멤버 함수 포인터입니다. 그들은 같은 유형이 아닙니다. –

+0

Exrtact가 정적 함수 인 경우 작동해야합니다. 그리고 GetHeadLine = RSSCrawler :: Extract를 사용하여 함수 포인터를 할당 할 수 있습니다. – CODError

답변

2

컴파일러 형식 불일치 에러 괄호의 제 1 세트의 차이를 표시하여이를 설명한다. 멤버 함수 포인터이 필요합니다. 이것은 'plain'/ free 함수 포인터와는 다른 유형입니다. (static 멤버 함수는 이러한 의미에서 자유 함수처럼 작동하지만 사용자가 가진 것은 아닙니다.)

여기에 대한 많은 자습서가 있지만 빠른 참조가 있습니다. 하지만,

// Declare pointer-to-member-function of a given class and signature 
std::string (RssCrawler::* GetHeadline)(const value&); 
// Bind it to any method of the same class and signature 
GetHeadline = &RssCrawler::Extract; 
// Call it on a given instance of said class 
std::cout << (someInstance.*GetHeadline)(someValue) << std::endl; // operator .* 

(단지도 SO의 자동 포맷하지 않고, 잘못된 외모 때문에. 이러한 기능과 변수 이름을 드 활용할 수없는 자신을 억제해야한다) 또는 당신은 const 초기화 포인터를 얻기 위해이 작업을 수행 할 수 있습니다 나는

std::string (RssCrawler::*const GetHeadline)(const value&) { 
    &RssCrawler::Extract 
}