Die Lambda-Funktion wird nie aufgerufen. Warum leitet der Compiler etwas ab?C++

Programme in C++. Entwicklerforum
Guest
 Die Lambda-Funktion wird nie aufgerufen. Warum leitet der Compiler etwas ab?

Post by Guest »

Ich habe folgenden Code:

Code: Select all

  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;
}

Code: Select all

clangDer 
-Compiler gibt zu dem oben Gesagten folgende Warnungen aus:

Fehler: Keine passende Funktion für Aufruf eines Objekts vom Typ „(Lambda bei Linenum:Spalte)“

und die Clang-Erklärung:

Code: Select all

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 {
^
Ich habe einige Lambdas, die sich perfekt kompilieren lassen:

Code: Select all

  auto distance_sq = [](auto &l, auto &r) -> double {
return pow(r.x - l.x, 2.0) + pow(r.y - l.y, 2.0);
};
Die Frage
Die Lambda-Funktion wird nie aufgerufen. Warum leitet der Compiler etwas ab? Warum ist es ungültig, wenn ich explizit pt2d geschrieben habe? Ich verstehe die Bedeutung des Compiler-Warntexts überhaupt nicht.
Kann mir das jemand erklären?
P.S. Ich weiß, es ist zu viel für eine Frage, aber es ist so Es ist in Ordnung, alles zu erfassen - [&]?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post