2017-05-28 9 views
-4
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; }); 
} 

in der for_each-Anweisung, wenn ich die Lambda-Funktion oben übergeben, gibt es mir den folgenden Fehler.keine übereinstimmende Funktion für Anruf an, wie man es repariert?

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; }); 

kann mir jemand sagen, wie man es repariert? Danke vielmals.

+0

Schließen Sie die '' Kopfzeile ein. –

+0

hallo, ich habe umfassen zeyuxie

+0

'ersetzen for_each' mit' std :: for_each' – TheThirdOne

Antwort

0

Dies hier auf VS2017 gebaut, vielleicht haben Sie einige Header vergessen?

#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; }); 
} 
Verwandte Themen