2016-07-16 4 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)"

私が間違っているのかわからないけど、ここに私のコード

​​
+3

平野の関数ポインタは、メンバ関数ポインタではありません... 関数に引数としてそれらを宣言するときには、const -correctnessを除き、関数ポインタの目的に反しだと思います。後者を研究する。 –

+1

Extractはメンバ関数です。 GetHeadlineは非メンバ関数ポインタです。彼らは同じタイプではありません。 –

+0

Exrtactが静的関数であれば動作するはずです。 GetHeadLine = RSSCrawler :: Extractを使用して関数ポインタを割り当てることができます。 – CODError

答えて

2

コンパイラは型の不一致エラーと括弧の最初のセットの違いを示すとともに、これを説明します。 メンバ関数ポインタが必要です。これは 'プレーン' /フリー関数ポインタとは別のタイプです。 (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 
} 
関連する問題