首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与使用lambda函数和for_each()调用.....Some错误不匹配

与使用lambda函数和for_each()调用.....Some错误不匹配
EN

Stack Overflow用户
提问于 2019-12-12 22:44:10
回答 1查看 37关注 0票数 0

我正在尝试使用for_each()来运行函数print_a(),该函数接受一个字符串和一个整数。该函数应打印字符串,并仅将int用于格式化目的。int是从一个名为longestword()的函数获取的,该函数返回map中最长单词的长度。

下面是包含第一个for_each的函数

代码语言:javascript
复制
void input_a(vector<string> inlist)
{
    map<string, int> wordcount;

    transform(inlist.begin(), inlist.end(), inserter(wordcount, wordcount.end()), [inlist] (string c){return counter(c, inlist);});
    int longest = longestword(wordcount);
    for_each(wordcount.begin(), wordcount.end(),[longest](pair <string, int> p) {print_a(p,longest);});
}

下面是函数Here _Here();

代码语言:javascript
复制
int longestword(map<string, int> list)
{
    int n{1};
    for_each(list.begin(), list.end(),[&n](string s){                %ROW 71
        if (s.length()>n)
        {
            n = s.length();
        }
    });               %ROW 76
    return n;
}

下面是函数print_a()

代码语言:javascript
复制
void print_a(pair <string, int> entry, int i)
{
    cout << setfill(' ') << right  << entry.first  <<  setw(i) <<  entry.second << endl;
}

这是错误代码。错误行在上面的代码中用注释进行了标记。

代码语言:javascript
复制
In file included from /usr/include/c++/7/algorithm:62:0,
                 from wordlist.h:7,
                 from wordlist.cc:1:
/usr/include/c++/7/bits/stl_algo.h: In instantiation of ‘_Funct std::for_each(_IIter, _IIter, _Funct) [with _IIter = std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char>, int> >; _Funct = longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>]’:
wordlist.cc:76:6:   required from here
/usr/include/c++/7/bits/stl_algo.h:3884:5: error: no match for call to ‘(longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>) (std::pair<const std::__cxx11::basic_string<char>, int>&)’
  __f(*__first);
  ~~~^~~~~~~~~~
wordlist.cc:71:52: note: candidate: longestword(std::map<std::__cxx11::basic_string<char>, int>)::<lambda(std::__cxx11::string)>
     for_each(list.begin(), list.end(),[&n](string s){
                                                    ^
wordlist.cc:71:52: note:   no known conversion for argument 1 from ‘std::pair<const std::__cxx11::basic_string<char>, int>’ to ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’

旁注:这是一个学校作业,我们不允许使用常规的for或while循环。

EN

回答 1

Stack Overflow用户

发布于 2019-12-12 23:15:40

通过将向量发送到longestword()而不是map解决了这个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59307062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档