Вот такой код:
//сверху 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;
};
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не выплняются команды C++ QtВыводится только первый cout и все, хотя должна выводится ещё и переменная
С помощью библиотеки QtXlsx взятой отсюда https://githubcom/VSRonin/QtXlsxWriter пытаюсь записать файл отчёта в формате *
Прошу вашей помощи в объяснении множественного наследованияВозникают проблемы с наследованием методов