编译时出现奇怪的错误

时间:2018-03-24 23:24:27

标签: c++ c++11

In file included from /usr/include/c++/7/bits/stl_algobase.h:71:0,  
                 from /usr/include/c++/7/bits/char_traits.h:39,  
                 from /usr/include/c++/7/ios:40,    
                 from /usr/include/c++/7/ostream:38,    
                 from /usr/include/c++/7/iostream:39,    
                 from /root/Desktop/proj08_main.cpp:2:  
/usr/include/c++/7/bits/predefined_ops.h: In instantiation of ‘bool   __gnu_cxx::__ops::_Iter_pred<_Predicate>::operator()(_Iterator) [with _Iterator = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _Predicate = std::__cxx11::basic_string<char>]’:  
/usr/include/c++/7/bits/stl_algo.h:120:14:   required from ‘_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [with _RandomAccessIterator =   __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _Predicate = __gnu_cxx::__ops::_Iter_pred<std::__cxx11::basic_string<char> >]’
/usr/include/c++/7/bits/stl_algo.h:161:23:   required from ‘_Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _Predicate = __gnu_cxx::__ops::_Iter_pred<std::__cxx11::basic_string<char> >]’  
/usr/include/c++/7/bits/stl_algo.h:3932:28:   required from ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*,   std::vector<std::__cxx11::basic_string<char> > >; _Predicate = std::__cxx11::basic_string<char>]’  
/usr/include/c++/7/bits/stl_algo.h:526:47:   required from ‘bool std::none_of(_IIter, _IIter, _Predicate) [with _IIter = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _Predicate = std::__cxx11::basic_string<char>]’  
/root/Desktop/proj08_market.cpp:116:79:   required from here  
/usr/include/c++/7/bits/predefined_ops.h:283:11: error: no match for call to ‘(std::__cxx11::basic_string<char>) (std::__cxx11::basic_string<char>&)’
  { return bool(_M_pred(*__it)); }  
           ^~~~~~~~~~~~~~~~~~~~

我已经检查了我的代码的每一行,我已经搜索到了所有地方,但我仍然无法找到导致此错误的原因。

1 个答案:

答案 0 :(得分:1)

它表示您将std::string作为第3个参数传递给std::none_of。而第三个参数必须是谓词函数。例如。你有这个:

std::vector<std::string> v;
std::string s;
std::none_of(v.begin(), v.end(), s);

修正:

std::vector<std::string> v;
std::string s;
std::none_of(v.begin(), v.end(), [&s](std::string const& elem) { return s == elem; });