Вот такой код:
//сверху main() с аргументами
double bl=stod(string(argv[1]));
double br=stod(string(argv[2]));
double h=stod(string(argv[3]));
//тут typedef, ничего особенного;
//y,z функции типа double -> double;
typedef function<void* (function<double(double)>)> worker;
worker i1 = [bl,br,h]{
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the y= "<<y(i)<<"\n";
std::this_thread::yield();
}
return;
};
worker i2 = [bl,br,h]{
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the z= "<<z(i)<<"\n";
std::this_thread::yield();
}
return;
};
В коде действительно есть расчет на синтакс. сахар. Но что же такое мне написал компилятор?
$ g++ main2.cpp
main2.cpp: In function 'int main(int, char**)':
main2.cpp:41:4: error: conversion from 'main(int, char**)::<lambda()>' to non-scalar type 'worker' {aka 'std::function<void*(std::function<double(double)>)>'} requested
};
^
main2.cpp:48:4: error: conversion from 'main(int, char**)::<lambda()>' to non-scalar type 'worker' {aka 'std::function<void*(std::function<double(double)>)>'} requested
};
^
main2.cpp:50:3: error: jump to case label [-fpermissive]
default:
И как компилятор трактует приведение лямбд к функциональному типу?
Откровенно говоря, не вижу, чтоб ваша лямбда принимала функцию от double
, возвращающую double
, и возвращала void*
. Она у вас принимает void
, и возвращает void
- тоак что если написать
typedef function<void(void)> worker;
то все вроде как сработает...
Вы же не удивитесь, скажем, определив некий тип как указатель на функцию от трех переменных, что ему не удастся передать указатель на функцию от одной переменной?...
Вы забыли объявить собственно аргументы лямбды. По умолчанию, получилась лямбда без аргументов, что не соответствует определению woker-а. Исправление:
worker i1 = [bl,br,h](function<double(double)> y){
for(double i=bl;i<=br;i+=h){
cout <<"On the "<<i<<"the y= "<<y(i)<<"\n";
std::this_thread::yield();
}
return;
};
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не выплняются команды C++ QtВыводится только первый cout и все, хотя должна выводится ещё и переменная
С помощью библиотеки QtXlsx взятой отсюда https://githubcom/VSRonin/QtXlsxWriter пытаюсь записать файл отчёта в формате *
Прошу вашей помощи в объяснении множественного наследованияВозникают проблемы с наследованием методов