问题描述
我只是想在字符串向量上获取迭代器,将迭代器传递给 'pos' 并与 pos 处的值一起传输到另一个函数,但是编译器告诉我在从 'const char*' 到 'size_t' 的 lambda 参数。我也得到这个标题 stl_algo.h:
不匹配调用 '(prototype::Monitor::setoptions(size_t)::
#include <iostream>
#include <Windows.h>
#include <string.h>
#include <map>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdio>
.
.
void setoptions(size_t id) {
switch(id){
case 0:
std::for_each(main_menu.lines.begin(),main_menu.lines.end(),[this](size_t pos){
this->setoption(pos,main_menu.lines[pos]);
});
break;
case 1:
break;
}
}
将所有这些都放在一个由“this”引用的类中,并且 setoption 与 setoptions 不同。我在其他地方读到,如果它只是将字符串指针的迭代器转换为 int 应该没问题,我也看到过这样使用的示例。
我也知道这整件事可能不是最好的方法,但我刚刚接触 C++,我正在尝试使用我学到的一些东西。
Win10 64 位 - gcc (MinGW.org GCC-6.3.0-1)
解决方法
当用 std::for_each()
迭代一个字符串向量时,传递给 lambda 的参数将是一个字符串,而不是一个 size_t
索引。这就是您收到转换错误的原因。
如果你需要一个索引,那么你将不得不改变你的 lambda 来单独跟踪索引,例如:
size_t pos = 0;
std::for_each(main_menu.lines.begin(),main_menu.lines.end(),[&,this](const string &s){ this->setOption(pos++,s); }
);
否则,干脆不要使用 std::for_each()
开头,例如:
for(size_t pos = 0; pos < main_menu.lines.size(); ++pos){
setOption(pos,main_menu.lines[pos]);
}