Лямбда-функция никогда не вызывается, почему компилятор что-то выводит?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Лямбда-функция никогда не вызывается, почему компилятор что-то выводит?

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

  auto sq_dist_all_polygons = [&](pt2d& p) -> double {
double t = 1e18;
pt2d   v0, v1;

for(std::vector
 &vertices : polygons) {
for(size_t vi = 0; vi < (vertices.size() - 1); vi += 1) {
v0 = vertices[vi];
v1 = vertices[vi + 1];

/* minimum squared distance to *all* polygon segments */
t = std::min(t, sq_dist_segment(p, v0, v1));
}
}

return t;
}
компилятор выдает следующие предупреждения на приведенное выше:

ошибка: нет соответствующей функции для вызова объекта типа '(лямбда в строке номер: столбец)'

и объяснение звука:

Код: Выделить всё

source.cpp: note: candidate function not viable: cannot convert argument of incomplete type 'void' to 'pt2d &' (aka 'pt2 &') for 1st argument
507 |   auto sq_dist_all_polygons = [&](pt2d& p) -> double {
^
У меня есть несколько лямбда-выражений, которые прекрасно компилируются:

Код: Выделить всё

  auto distance_sq = [](auto &l, auto &r) -> double {
return pow(r.x - l.x, 2.0) + pow(r.y - l.y, 2.0);
};
Вопрос
Лямбда-функция никогда не вызывается, почему компилятор что-то выводит? Почему это void, когда я явно написал pt2d? Я совершенно не понимаю смысла текста предупреждения компилятора.
Может кто-нибудь объяснить?
P.S Я знаю, что это слишком много для одного вопроса, но так ли это? можно захватить все - [&]?

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-anything
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»