2014-01-25 4 views
0

У меня есть простое требование, которое включает передачу указателей функций на другую функцию и их выполнение. Функция приведена ниже.Функция C++ Anonymous с возвращаемым значением

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 (Canvas &, Point2, поплавок () (с плавающей точкой), поплавок () (флоат)) '

Я проверил снова и снова, и все кажется правильным, включая аргументы компилятора Eclipse на Ubuntu.

Благодаря

+1

Ваш вызывающий код Безразлично» t содержит анонимные функции. Он содержит лямбда-выражения. –

+0

@ Kerrek-SB: Спасибо, чтобы указать на это. Я никогда не использовал лямбда-выражения до ... – inam101

ответ

3

лямбда-выражения с захватом не может быть неявно преобразован в указатель на функцию, без захвата он мог.

способов решить вашу проблему:

  • не улавливают значение в вашей лямбдах
  • изменить подпись 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

Смежные вопросы