• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

nie działa funkcja max() w c++ (#include<algorithm>)

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,088 wizyt
pytanie zadane 22 stycznia 2017 w C i C++ przez heros22pt Użytkownik (950 p.)
edycja 22 stycznia 2017 przez heros22pt

Mam problem z funkcją, która ma zwracać największy element z wektora struktur vector<Car>, gdzie w strukturze przetczymuje informacje o nazwie samochodu, roku powstania, kraju i prędkości...

Wszystko oprócz podanego niżej kodu działa bez zarzutu.

bool predicat_to_max(Car a, Car b) //ex.D
{
	if (a.speed > b.speed)
	{
		return true;
	}
}
void exD(vector<Car>list) //ex.D
{
	auto it = max(list.begin(), list.end(), predicat_to_max);
	cout << "The fastest car " << it->brand << "\nV-max= " << it->speed << "\ncountry " << it->country << "year " << it->year;
}

nie wiem, co robię tu nie tak.

1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\zadanie12_1\zadanie12_1\zadanie12_1\main.cpp(49): warning C4018: '<' : signed/unsigned mismatch
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\zadanie12_1\zadanie12_1\zadanie12_1\main.cpp(61): warning C4018: '<' : signed/unsigned mismatch
1>c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\zadanie12_1\zadanie12_1\zadanie12_1\main.cpp(112): warning C4018: '<' : signed/unsigned mismatch
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(521): error C2664: 'bool (Car,Car)' : cannot convert argument 2 from 'const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>' to 'Car'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm(4103) : see reference to function template instantiation 'bool std::_Debug_lt_pred<bool(__cdecl *)(Car,Car),const _Ty&,const _Ty&>(_Pr,_Ty1,_Ty2,std::_Dbfile_t,std::_Dbline_t)' being compiled
1>          with
1>          [
1>              _Ty=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>
1>  ,            _Pr=bool (__cdecl *)(Car,Car)
1>  ,            _Ty1=const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>> &
1>  ,            _Ty2=const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>> &
1>          ]
1>          c:\users\lenovo\desktop\politechnika\informatyka\zadaniac++\zadanie12_1\zadanie12_1\zadanie12_1\main.cpp(128) : see reference to function template instantiation 'const _Ty &std::max<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>,bool(__cdecl *)(Car,Car)>(const _Ty &,const _Ty &,_Pr)' being compiled
1>          with
1>          [
1>              _Ty=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>
1>  ,            _Pr=bool (__cdecl *)(Car,Car)
1>          ]
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(521): error C2664: 'bool (Car,Car)' : cannot convert argument 1 from 'const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>' to 'Car'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(523): error C2664: 'bool (Car,Car)' : cannot convert argument 2 from 'const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>' to 'Car'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(523): error C2664: 'bool (Car,Car)' : cannot convert argument 1 from 'const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Car>>>' to 'Car'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 

2 odpowiedzi

+1 głos
odpowiedź 22 stycznia 2017 przez criss Mędrzec (172,570 p.)
wybrane 22 stycznia 2017 przez heros22pt
 
Najlepsza

Dokumentacja std::max

która ma zwracać największy element z wektora 

W takim razie raczej chodzi ci o std::max_element .

komentarz 22 stycznia 2017 przez heros22pt Użytkownik (950 p.)
Dzięki!!!
0 głosów
odpowiedź 22 stycznia 2017 przez Philip Bywalec (2,320 p.)

"predicat_to_max" to funkcja?

Zatem nawiasy okrągłe pasuje dać :-) .

" auto it = max(list.begin(), list.end(), predicat_to_max); " <==

komentarz 22 stycznia 2017 przez heros22pt Użytkownik (950 p.)
to jest predykat, nie funkcja. W predykatach nie daje się nawiasów na końcu
komentarz 22 stycznia 2017 przez criss Mędrzec (172,570 p.)

Predykat to funkcja (ew. obiekt funkcyjny).

@Philip - 

f(); - wywołanie funkcji f

f; - odwołanie się do wskaźnika na funkcje f

Podobne pytania

0 głosów
5 odpowiedzi 3,550 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez giedymin33 Początkujący (290 p.)
0 głosów
0 odpowiedzi 172 wizyt
pytanie zadane 4 października 2019 w Python przez Racjan Nowicjusz (190 p.)
+1 głos
1 odpowiedź 178 wizyt

93,439 zapytań

142,431 odpowiedzi

322,677 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...