fork(5) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5.  
  6. struct ActionType {
  7. int a; int b;
  8. int key;
  9. };
  10.  
  11. ActionType* FindLast( std::vector<ActionType*>& actions );
  12. bool pred(ActionType& element);
  13.  
  14. int main() {
  15. std::vector<ActionType*> actions;
  16.  
  17. ActionType myS300 = {10,20,30};
  18. actions.push_back( &myS300 );
  19.  
  20. ActionType myS40 = {12,13,40};
  21. actions.push_back( &myS40 );
  22.  
  23. ActionType myS301 = {11,21,30};
  24. actions.push_back( &myS301 );
  25.  
  26. ActionType* pa = FindLast( actions ); // find the last key == 30 (hardcoded)
  27.  
  28. std::cout << "done" << std::endl;
  29. std::cout << "pa: " << pa->a << " " << pa->b << " " << pa->key << std::endl;
  30. return 0;
  31. }
  32.  
  33. bool pred(ActionType& element)
  34. {
  35. if (element.key == 30) return true;
  36. else return false;
  37. }
  38.  
  39. ActionType* FindLast( std::vector<ActionType*>& actions )
  40. {
  41. std::reverse_iterator<ActionType*> p
  42. = std::find_if( std::reverse_iterator<ActionType*>(actions.end()),
  43. std::reverse_iterator<ActionType*>(actions.begin()),
  44. pred);
  45. return p.base();
  46. }
  47.  
Compilation error #stdin compilation error #stdout 0s 4352KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘ActionType* FindLast(std::vector<ActionType*>&)’:
prog.cpp:42:73: error: no matching function for call to ‘std::reverse_iterator<ActionType*>::reverse_iterator(std::vector<ActionType*>::iterator)’
         = std::find_if( std::reverse_iterator<ActionType*>(actions.end()),
                                                                         ^
In file included from /usr/include/c++/6/bits/stl_algobase.h:67:0,
                 from /usr/include/c++/6/bits/char_traits.h:39,
                 from /usr/include/c++/6/ios:40,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/6/bits/stl_iterator.h:140:9: note: candidate: template<class _Iter> std::reverse_iterator<_Iterator>::reverse_iterator(const std::reverse_iterator<_Iter>&)
         reverse_iterator(const reverse_iterator<_Iter>& __x)
         ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:140:9: note:   template argument deduction/substitution failed:
prog.cpp:42:73: note:   ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ is not derived from ‘const std::reverse_iterator<_Iterator>’
         = std::find_if( std::reverse_iterator<ActionType*>(actions.end()),
                                                                         ^
In file included from /usr/include/c++/6/bits/stl_algobase.h:67:0,
                 from /usr/include/c++/6/bits/char_traits.h:39,
                 from /usr/include/c++/6/ios:40,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/6/bits/stl_iterator.h:132:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator(const std::reverse_iterator<_Iterator>&) [with _Iterator = ActionType*]
       reverse_iterator(const reverse_iterator& __x)
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:132:7: note:   no known conversion for argument 1 from ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ to ‘const std::reverse_iterator<ActionType*>&’
/usr/include/c++/6/bits/stl_iterator.h:127:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator(std::reverse_iterator<_Iterator>::iterator_type) [with _Iterator = ActionType*; std::reverse_iterator<_Iterator>::iterator_type = ActionType*]
       reverse_iterator(iterator_type __x) : current(__x) { }
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:127:7: note:   no known conversion for argument 1 from ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ to ‘std::reverse_iterator<ActionType*>::iterator_type {aka ActionType*}’
/usr/include/c++/6/bits/stl_iterator.h:121:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator() [with _Iterator = ActionType*]
       reverse_iterator() : current() { }
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:121:7: note:   candidate expects 0 arguments, 1 provided
prog.cpp:43:61: error: no matching function for call to ‘std::reverse_iterator<ActionType*>::reverse_iterator(std::vector<ActionType*>::iterator)’
           std::reverse_iterator<ActionType*>(actions.begin()),
                                                             ^
In file included from /usr/include/c++/6/bits/stl_algobase.h:67:0,
                 from /usr/include/c++/6/bits/char_traits.h:39,
                 from /usr/include/c++/6/ios:40,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/6/bits/stl_iterator.h:140:9: note: candidate: template<class _Iter> std::reverse_iterator<_Iterator>::reverse_iterator(const std::reverse_iterator<_Iter>&)
         reverse_iterator(const reverse_iterator<_Iter>& __x)
         ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:140:9: note:   template argument deduction/substitution failed:
prog.cpp:43:61: note:   ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ is not derived from ‘const std::reverse_iterator<_Iterator>’
           std::reverse_iterator<ActionType*>(actions.begin()),
                                                             ^
In file included from /usr/include/c++/6/bits/stl_algobase.h:67:0,
                 from /usr/include/c++/6/bits/char_traits.h:39,
                 from /usr/include/c++/6/ios:40,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/6/bits/stl_iterator.h:132:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator(const std::reverse_iterator<_Iterator>&) [with _Iterator = ActionType*]
       reverse_iterator(const reverse_iterator& __x)
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:132:7: note:   no known conversion for argument 1 from ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ to ‘const std::reverse_iterator<ActionType*>&’
/usr/include/c++/6/bits/stl_iterator.h:127:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator(std::reverse_iterator<_Iterator>::iterator_type) [with _Iterator = ActionType*; std::reverse_iterator<_Iterator>::iterator_type = ActionType*]
       reverse_iterator(iterator_type __x) : current(__x) { }
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:127:7: note:   no known conversion for argument 1 from ‘std::vector<ActionType*>::iterator {aka __gnu_cxx::__normal_iterator<ActionType**, std::vector<ActionType*> >}’ to ‘std::reverse_iterator<ActionType*>::iterator_type {aka ActionType*}’
/usr/include/c++/6/bits/stl_iterator.h:121:7: note: candidate: std::reverse_iterator<_Iterator>::reverse_iterator() [with _Iterator = ActionType*]
       reverse_iterator() : current() { }
       ^~~~~~~~~~~~~~~~
/usr/include/c++/6/bits/stl_iterator.h:121:7: note:   candidate expects 0 arguments, 1 provided
stdout
Standard output is empty