[C++ / STL] Inicjalizacja referencji na element vectora wyrażeniem lambda
Ostatnio zmodyfikowano 2016-04-15 18:04
Gibas11 Temat założony przez niniejszego użytkownika |
[C++ / STL] Inicjalizacja referencji na element vectora wyrażeniem lambda » 2016-04-15 17:44:47 Jak w tytule, wprawdzie błąd rozwiązałem inaczej (i lepiej) iteratorami, ale ciekawi mnie dlaczego nie działa. item & currentPlayer = ([]( std::vector < item > & vect )->item & { for( item & i: vect ) if( i.first == "___________" ) return i; } );
invalid initialization of non-const reference of type ‘item&’ from an rvalue of type ‘records(sf::RenderWindow&, uint16_t, sf::Font&)::<lambda(std::vector<std::pair<std::__cxx11::basic_string<char>, short unsigned int> >&)>’ Ps. log obciąłem o kawałki "aka...", item to po prostu para stringa i uint16_t. |
|
Gibas11 Temat założony przez niniejszego użytkownika |
» 2016-04-15 17:57:36 Ok, strasznie głupi błąd, zapomniałem o przekazaniu parametrów. *facepalm* item & currentPlayer = []( std::vector < item > & vect )->item & { for( item & i: vect ) if( i.first == "___________" ) return i; }( sorted );
|
|
Kaikso |
» 2016-04-15 18:00:33 Yyyyy, może poczytaj trochę o wyrażeniach lambda. item & currentPlayer = []( std::vector < item > & vect )->item & { for( item & i: vect ) if( i.first == "___________" ) return i; }( ); Możesz też zrobić tak: item & currentPlayer = [ & ]()->item & { for( item & i: vect ) if( i.first == "___________" ) return i; }(); No i zamiast std::vector < std::pait < T1, T2 > > nie lepiej użyć std::map < T1, T2 > ? |
|
Gibas11 Temat założony przez niniejszego użytkownika |
» 2016-04-15 18:04:07 Czytać czytałem, zwykła programistyczna „literówka”. ;-) No... to chyba zamykam. EDIT: A mapy nie mogłem użyć z innych powodów. :< |
|
« 1 » |