2014-01-25 231 views
0

我有一個簡單的要求,它涉及到傳遞函數指針到另一個函數,並在那裏執行它們。 該功能如下。C++匿名函數返回值

void drawPolarCurves(Canvas &cnv, Point2 center, float (* fx)(float), float (* fy)(float)); 

我嘗試通過匿名函數作爲參數,如下所示。

void drawMyShape(Canvas &cnv, Point2 center, float width, float height) 
{ 
    drawPolarCurves(cnv, center, 
      [&width](float x)-> float { return x * width; }, 
      [&height](float x)-> float { return x * height; } 
      ); 
} 

這將產生以下的錯誤:

參數無效' 候選人有: 空隙drawPolarCurves(帆布&,POINT2,浮子()(浮動),浮子()(浮點)) '

我一遍又一遍地檢查一切似乎是正確的,包括Ubuntu上的Eclipse編譯器參數。

由於

+1

調用代碼沒有按」 t包含匿名函數。它包含lambda表達式。 –

+0

@ Kerrek-SB:謝謝你指出。我從未使用lambda表達式... – inam101

回答

3

與捕獲lambda表達式不能被隱式轉換爲一個函數指針,而無需捕獲它可以。

方法來解決您的問題:

  • 不要在你的lambda表達式捕獲值
  • 變化drawPolarCurves簽名接受std::function<float(float)>或模板參數
+0

我將函數簽名更改爲:void drawPolarCurves(Canvas&cnv,Point2 center,std :: function fx,std :: function fy) 仍然錯誤:符號'功能'無法解析,無效參數'候選人是:void drawPolarCurves(Canvas&,Point2,?,?)' – inam101

+0

@ inam101您是否包含頭文件'functional'? – pmr

+0

是的,我已經包含它了:#include 。我認爲它可能會與#include 混淆std ... – inam101