调用没有匹配函数,如何修复

no matching function for call to, how to fix it?

本文关键字:何修复 函数 调用      更新时间:2023-10-16
int main() 
{ 
    map<string, int> M; 
    vector<string> V; 
    set<string> S; 
    ifstream inFile("sample_doc.txt"); 
    copy( istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(V) ); 
    ifstream inFile2("stopwords.txt"); 
    copy( istream_iterator<string>(inFile2), istream_iterator<string>(), inserter( S, S.begin() ) ); 
    for_each( V.begin(), V.end(), [&](string & s){ S.count(s) == 0 ? M[s]++ : true; } );
}

在 for_each 语句中,当我传入上面的 lambda 函数时,它给了我以下错误。

error: no matching function for call to ‘for_each(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, main()::__lambda0)’
   for_each( V.begin(), V.end(), [&](string & s){ S.count(s) == 0 ? M[s]++ : true; } );

有人可以告诉我如何解决它吗?非常感谢。

这是基于VS2017构建的,也许您忘记了一些标题?

#include <map>
#include <algorithm>
#include <set>
#include <iterator>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
void foo()
{
  using namespace std;
  map<string, int> M;
  vector<string> V;
  set<string> S;
  ifstream inFile("sample_doc.txt");
  copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(V));
  ifstream inFile2("stopwords.txt");
  copy(istream_iterator<string>(inFile2), istream_iterator<string>(), inserter(S, S.begin()));
  for_each(V.begin(), V.end(), [&](string & s) { S.count(s) == 0 ? M[s]++ : true; });
}