Dzień dobry!
W trakcie pisania programu będącego ćwiczeniem języka c++ napotkałem potrzebę odnajdywania maksymalnej wartości bezwzględnej elementów w wektorze. Postanowiłem wykorzystać funkcję max_element() z pakietu algorithm z biblioteki standardowej. Jeśli wywoływałem ją podając tylko iteratory na początek i na koniec wektora, to funkcja działała poprawnie, natomiast jeśli tylko dodałem jako trzeci argument funkcję porównującą wartości bezwzględne dwóch elementów to otrzymywałem błąd:
error: no matching function for call to 'max_element(std::vector<float>::iterator, std::vector<float>::iterator, <unresolved overloaded function type>)
Zaimportowałem wszystkie potrzebne biblioteki, a wśród moich funkcji i zmiennych nie ma żadnej dla której mógłby się pojawić konflikt nazwy. Kod pliku main.cpp wygląda następująco:
#include "include/Matrix.hpp"
#include "src/Matrix.cpp"
#include "include/Shape.hpp"
#include "include/Matrix_Functions.hpp"
#include "src/Matrix_Functions.cpp"
static bool abs_compare(float a, float b)
{
return abs(a)<abs(b);
}
int main() {
vector<float> vect{3, 6, 3, 2, 14, 7, 4};
cout << distance(vect.begin(), max_element(vect.begin(), vect.end(), abs_compare)) << endl;
return 0;
}
Kody plików nagłówkowych i źródłowych są dostępne pod linkiem:
https://github.com/JakubKluk/Learning-Cpp.git
Byłbym wdzięczny gdyby ktoś zechciał mi wskazać możliwą przyczynę tego problemu ;)